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));
}
在上面的例子中,選用的是硬編碼在枚舉...
誰能幫助?我相信這很容易,我非常接近,但現在我正在圈圈。
我試過了,它的工作原理與Visual Studio廣告完全一樣,但不是Blend(Microsoft Expression)。 我仍在閱讀相關文章,瞭解如何在Expression Blend中做同樣的事情。 如果你有答案(你似乎有他們所有!)讓我知道,無論如何,謝謝你的幫助一堆。我越來越近...... – Seb 2010-03-25 18:53:16
我對Blend沒有太多經驗,但我會檢查程序集是否實際加載(如果您在同一個項目中有它們,也可以將您的控件移動到單獨的程序集中)。 – laktak 2010-03-26 07:49:12
這比我預期的更復雜。不過,我發現了一篇關於這個話題的非常紮實的文章(我正在通過它)。在這裏,如果它對任何人都有用: http://blogs.silverlight.net/blogs/justinangel/archive/2008/11/17/silverlight-design-time-extensibility.aspx – Seb 2010-03-30 14:27:17