所以我创建了一个User Control,并在TestProperty上创建了一个依赖属性。
我想拥有此User Control的2个实例,并为每个实例将TestProperty设置为不同的值。
<widgets:mycontrol Test="val1"></widgets:WTComboBox>
<widgets:mycontrol Test="val2"></widgets:WTComboBox>
如果我将testproperty创建为静态DependencyProperty,如下所示:
public static readonly DependencyProperty TestProperty=
DependencyProperty.Register("Test", typeof(string), typeof(mycontrol), null);
在控件中,显然我不能在每个实例中都有不同的值,但是当我创建testproperty作为普通实例属性时
public DependencyProperty TestProperty;
public mycontrol()
{
TestProperty = DependencyProperty.Register("Test", typeof(string), typeof(mycontrol), null);
}
在控件上,然后设计器无法识别属性存在并创建错误,但在运行时控件完美运行,并且控件的每个实例都具有测试属性的正确值。
所以问题是如何在设计器中使用实例依赖属性?
由于
答案 0 :(得分:1)
DependencyProperty
已注册类型,而不是实例。您正确编写此代码以进行注册。 Reference from here.
public static readonly DependencyProperty TestProperty=
DependencyProperty.Register("Test", typeof(string), typeof(mycontrol), null);
然后你说,
然后显然我不能在每个实例中都有不同的值
事实并非如此。
您可以为每个实例设置不同的值,尽管DependencyProperty
以这种方式注册,但它不是静态属性,它只能为所有实例提供一个值类型,就像你可能拥有的常规CLR属性一样。要了解依赖项属性和CLR属性之间的差异,请参阅this answer。
然后,您定义非静态依赖项属性(并询问如何让设计器识别此属性),您不应该这样做。已经有some answer为什么你不应该写一个非静态依赖属性,即使它看起来似乎有效。