2010-03-24 79 views
1

我創建了一個自定義控件,並且想創建一個屬性(可在Blend的設計時使用),該屬性將提供下拉列表或組合框。設計師然後將選擇其中一個可用選項。非常像「通用屬性」選項卡中的「光標」組合,除了我想完全控制組閤中的項目。選擇可能會有所不同,所以我不能使用硬編碼的「枚舉」。WPF的自定義設計時屬性

我知道這是可能宣佈設計屬性是這樣的:

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

} 

在上面的例子中,選用的是硬編碼在枚舉...

誰能幫助?我相信這很容易,我非常接近,但現在我正在圈圈。

回答

0

您可能正在尋找PropertyValueEditor。

這是Walkthrough: Implementing an Inline Value Editor

+0

我試過了,它的工作原理與Visual Studio廣告完全一樣,但不是Blend(Microsoft Expression)。 我仍在閱讀相關文章,瞭解如何在Expression Blend中做同樣的事情。 如果你有答案(你似乎有他們所有!)讓我知道,無論如何,謝謝你的幫助一堆。我越來越近...... – Seb 2010-03-25 18:53:16

+0

我對Blend沒有太多經驗,但我會檢查程序集是否實際加載(如果您在同一個項目中有它們,也可以將您的控件移動到單獨的程序集中)。 – laktak 2010-03-26 07:49:12

+1

這比我預期的更復雜。不過,我發現了一篇關於這個話題的非常紮實的文章(我正在通過它)。在這裏,如果它對任何人都有用: http://blogs.silverlight.net/blogs/justinangel/archive/2008/11/17/silverlight-design-time-extensibility.aspx – Seb 2010-03-30 14:27:17