我有一个WPF应用程序,我在代码隐藏中使用依赖属性,我想通过XAML声明来设置。
e.g。
<l:SelectControl StateType="A" Text="Hello"/>
因此,在此示例中,我有一个名为UserControl
的{{1}},它有一个名为SelectControl
的属性,可以操纵其设置器中的其他一些属性。
为了帮助说明问题,我在示例中添加了另一个名为StateType
的属性,继续阅读,我将进一步解释。
Codebehind摘录......
Text
现在,如果我在setter上设置了断点(对于public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(String), typeof(SelectControl));
public String Text
{
get { return (String)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
public static readonly DependencyProperty StateTypeProperty = DependencyProperty.Register("StateType", typeof(String), typeof(SelectControl));
public String StateType
{
get { return (String)GetValue(StateTypeProperty) }
set
{
switch (value)
{
case "A":
AnotherPropertyBoolean = true;
break;
case "B":
AnotherPropertyBoolean = false;
break;
default:
// this is only an example...
}
}
}
或StateType
),事实证明它从未执行过。
但是为Text
声明的值,即“Hello”出现在它的数据绑定Text
中,当然我将另一个文本控件绑定到TextBox
的值我可以看到太
有谁知道发生了什么事?
答案 0 :(得分:14)
依赖项属性的“CLR-wrappers”仅在通过代码完成时被调用。 XAML依赖于DependencyProperty.Register(...)调用中指定的名称。因此,不要像上面那样“扩展”依赖属性的setter的逻辑,而只需将自定义逻辑放在PropertyChangedCallback函数中。