我有一个自定义的silverlight控件,几乎是一个美化的文本框。我有一些属性,我需要能够从Silverlight中的XAML进行设置,因此对于我创建的每个属性都是这样的:
public bool UseCustomTooltips
{
get { return _useCustomTooltips; }
set
{
_useCustomTooltips = value;
DoSomeOtherStuff();
}
}
public static readonly DependencyProperty UseCustomTooltipsProperty = DependencyProperty.Register("UseCustomTooltips",
typeof(bool), typeof(MyControl), new PropertyMetadata(false, PropertyChangedCallback));
在XAML中,我可以创建控件并为该属性指定一个值,如下所示:
<Controls:MyControl UseCustomTooltips="True" />
控件的状态是更新,我的回调被击中,一切都是应该的。但是,当我尝试从样式而不是在每个控件实例中指定该状态时,如下所示:
<Style x:Key="MyControl" TargetType="Controls:MyControl">
<Setter Property="Foreground" Value="Yellow"/>
<Setter Property="UseCustomTooltips" Value="True"/>
</Style>
<Controls:MyControl Style="{StaticResource MyControl}" />
我的自定义属性永远不会被设置,即使继承的属性Foreground采用样式中指定的值,我的回调也永远不会被命中。这导致我假设我的依赖属性连接的方式有问题,但到目前为止我在网上看到的所有内容都告诉我,我的方法是正确的。
有人能指出我正确的方向吗? 感谢。
答案 0 :(得分:2)
这不是注册依赖项属性的正确方法。
public bool UseCustomTooltips
{
get { return (bool)GetValue(UseCustomTooltipsProperty); }
set { SetValue(UseCustomTooltipsProperty, value); }
}
public static readonly DependencyProperty UseCustomTooltipsProperty =
DependencyProperty.Register("UseCustomTooltips",
typeof(bool),
typeof(MyControl),
new PropertyMetadata(false, new PropertyChangedCallback(MyCallbackMethod)));
使用propdp
代码段,它确实很棒。