Настраиваемый атрибут времени разработки для WPF

Я создал настраиваемый элемент управления и хотел бы создать атрибут (доступный во время разработки Blend), который предлагал бы раскрывающийся список или поле со списком. Затем дизайнер выберет один из доступных вариантов. Очень похоже на комбинацию «Курсор» на вкладке «Общие свойства», за исключением того, что я хочу иметь полный контроль над тем, какие элементы входят в комбинацию. Выбор может варьироваться, поэтому я не могу использовать жестко закодированное «перечисление».

Я знаю, что можно объявить атрибуты дизайна следующим образом:

protected string mString;
[Category("Common Properties")]
[DisplayName("My Friendly Name")]
public string MyFriendlyName
{
   get { return mString; }
   set { mString= value; }
}

В приведенном выше случае «Мое дружественное имя» — это просто строка. Пользователь может ввести все, что захочет.

protected Uri mPathname;
[Category("Common Properties")]
[DisplayName("Resource pathname")]
public Uri MyResPathname
{
   get { return mPathname; }
   set { mPathname = value; }
}

В приведенном выше случае «Путь к ресурсу» имеет поле со списком, но список элементов обрабатывается Blend.

Если я использую перечисление, результатом будет комбинация с моими элементами, но тогда я не могу изменить список элементов.

public enum MyChoices
{
   Aaa,
   Bbb
}

public class MyButton : Button
{

  (...)

  [Category("Common Properties")]
  public MyChoices MyChoice
  {
     get { return (MyChoices)GetValue(MyChoiceProperty); }
     set { SetValue(MyChoiceProperty, value); }
  }

  public static readonly DependencyProperty MyChoiceProperty =
        DependencyProperty.Register("MyChoice", 
                                    typeof(MyChoices), 
                                    typeof(MyButton ), 
                                    new UIPropertyMetadata(
                                          (MyChoices)MyChoices.Aaa,
                                          OnMyChoiceChangedCallback));

}

В приведенном выше примере выбор жестко запрограммирован в перечислении...

Кто-нибудь может помочь? Я уверен, что это легко, я очень близок, но теперь я хожу кругами.


person Seb    schedule 24.03.2010    source источник


Ответы (1)


Вероятно, вы ищете PropertyValueEditor.

Вот Пошаговое руководство: реализация встроенного редактора значений.

person laktak    schedule 24.03.2010
comment
Я попробовал, и он отлично работает, как рекламируется для Visual Studio, но не в Blend (Microsoft Expression). Я все еще читаю статьи по теме, чтобы узнать, как сделать то же самое в Expression Blend. Если у вас есть ответ (кажется, у вас есть все!) Дайте мне знать, несмотря ни на что, большое спасибо за вашу помощь. Я приближаюсь... - person Seb; 25.03.2010
comment
У меня нет большого опыта работы с Blend, но я бы проверил, действительно ли была загружена сборка (также переместите элементы управления в отдельную сборку, если они есть в том же проекте). - person laktak; 26.03.2010
comment
Это сложнее, чем я ожидал. Тем не менее, я нашел очень солидную статью на эту тему (сейчас просматриваю ее). Вот он, если кому-то пригодится: blogs.silverlight.net/blogs/justinangel/archive/2008/11/17/ - person Seb; 30.03.2010