我有一个自定义WPF控件基类。该基类注册了类型为“ List ”的自定义属性。

如何在设计时初始化属性?列表中应始终有8个对象,并且用户应能够修改该对象。

我试图通过PropertyMetadata对象传递默认值,但是属性编辑器中显示的集合始终为空。

public class CustomPropertyTestBase : UserControl
{

    static CustomPropertyTestBase()
    {
        List<object> defaultValue = new List<object>(new object[8]);
        MyCustomObjectsProperty = DependencyProperty.Register("MyCustomObjects",
            typeof(List<object>), typeof(CustomPropertyTestBase),
            new PropertyMetadata(defaultValue));
    }

    public static DependencyProperty MyCustomObjectsProperty;

    [Category("MyCustomProperties")]
    public List<object> MyCustomObjects
    {
        get;
        set;
    }
}


编辑:

每当我在属性编辑器中添加新对象时,这些新对象都不会存储。重新打开属性编辑器后,列表再次为空。

我已将调试器附加到设计器,并且该属性的get或set方法从未被编辑器调用。

解:

正如“ dowhilefor”所提到的。我不得不更改类型ObservableCollection。现在,设计人员可以正确存储更改后的列表。
谢谢。

最佳答案

这样的事情应该起作用:

public MainWindow()
    {
        InitializeComponent();

        if( System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
        {
            MyCustomObjects = new List<object>();
            MyCustomObjects.Add("Hello");
        }
    }


但也许它不是最佳解决方案。我记得在表达式混合中有一些工具具有虚拟数据,但不记得他们是如何做到的。当然,这是静态的,您无法更改,但是我认为这是不可能的。

10-07 13:12
查看更多