2010-03-24 2 views
1

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

Я знаю, что можно объявить дизайн атрибуты, как это:

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

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

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)); 

} 

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

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

ответ

0

Возможно, вы ищете PropertyValueEditor.

Вот Walkthrough: Implementing an Inline Value Editor.

+0

Я пробовал, и он отлично работает, как рекламируется для Visual Studio, но не в Blend (Microsoft Expression). Я все еще читаю связанные статьи, чтобы узнать, как сделать то же самое в Expression Blend. Если у вас есть ответ (кажется, у вас есть все!) Сообщите мне, независимо от того, спасибо за кучу за вашу помощь. Я приближаюсь ... – Seb

+0

У меня нет большого опыта работы с Blend, но я бы проверял, действительно ли сборка загружена (также перемещайте элементы управления в отдельную сборку, если они есть в одном проекте). – laktak

+1

Это сложнее, чем я ожидал. Тем не менее, я нашел очень прочную статью об этой теме (сейчас я ее переживаю). Вот оно, в случае, если это полезно для всех: http://blogs.silverlight.net/blogs/justinangel/archive/2008/11/17/silverlight-design-time-extensibility.aspx – Seb

Смежные вопросы