2010-03-24 77 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