C# 使用自定义控件在silverlight中设置样式与内联属性

C# 使用自定义控件在silverlight中设置样式与内联属性,c#,wpf,xaml,silverlight,C#,Wpf,Xaml,Silverlight,我有一个自定义silverlight控件,它几乎是一个美化的文本框。我有一些属性,我需要能够在silverlight中从XAML进行设置,因此我为每个属性创建了如下内容: public bool UseCustomTooltips { get { return _useCustomTooltips; } set { _useCustomTooltips = value; DoSomeOther

我有一个自定义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));
<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}" />
在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));
<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}" />

控件的状态是update,我的回调被命中,一切都正常。但是,当我尝试从样式而不是在控件的每个实例中指定该状态时,如下所示:

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));
<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}" />

我的自定义属性永远不会设置,我的回调也永远不会命中,即使继承的属性前台采用样式中指定的值。这让我假设依赖属性的连接方式有问题,但到目前为止我在网上看到的一切都告诉我它是正确的

谁能给我指出正确的方向吗?
谢谢。

这不是注册依赖项属性的正确方法

    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
片段,这真是一件美妙的事情。

感谢您的回复。对getter/setter的理解很好——该成员最初不是一个依赖属性,并且在添加该属性后,我没有对该部分进行转换。至于回调声明的变化,Intellisense告诉我,这在功能上与我所拥有的是等价的。无论如何,我做了这两个更改,但仍在经历这种行为-样式适用,但不设置自定义属性。而且,我从来不知道这个片段。谢谢你介绍我。事实证明,还有一处房产也有同样的问题。我更改了第一个,但没有更改第二个,第二个仍然存在问题,无法应用样式的其余部分。一旦我按照您的建议修复了所有getter/setter以使用dependency属性,问题就自行解决了。谢谢