WPF的自定义设计时属性

时间:2010-03-24 17:35:44

标签: wpf attributes design-time

我已经创建了一个自定义控件,并希望创建一个属性(在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));

}

在上面的示例中,选项在枚举中进行了硬编码...

有人可以帮忙吗?我确定这很容易,我很亲密,但现在我要去圈子了。

1 个答案:

答案 0 :(得分:0)

您可能正在寻找PropertyValueEditor。

这是Walkthrough: Implementing an Inline Value Editor