【问题标题】:Style vs inline property setting in silverlight with a custom control带有自定义控件的 Silverlight 中的样式与内联属性设置
【发布时间】:2015-06-15 19:45:30
【问题描述】:

我有一个自定义的 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 采用样式中指定的值,我的自定义属性也永远不会被设置并且我的回调永远不会被命中。这导致我假设我的依赖属性的连接方式有问题,但到目前为止我在网上看到的所有内容都告诉我它是正确的。

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

【问题讨论】:

    标签: c# wpf xaml silverlight


    【解决方案1】:

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

        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)));
    

    使用propdpsn-p,真的是很美的东西。

    【讨论】:

    • 感谢您的回复。很好地抓住了 getter/setter - 该成员最初不是依赖属性,并且在添加属性后我没有转换该部分。就回调声明更改而言,Intellisense 告诉我这在功能上与我所拥有的相同。无论如何,我做了这两项更改并且仍然遇到这种行为 - 样式适用但没有设置我的自定义属性。另外,从来不知道sn-p。谢谢你介绍我。
    • 事实证明,还有另一个属性存在同样的问题。我更改了第一个,但没有更改第二个,第二个仍然存在问题,阻止了其余样式的应用。一旦我按照您的建议修复了所有 getter/setter 以使用依赖属性,问题就会自行解决。谢谢!
    猜你喜欢
    • 2011-09-09
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    相关资源
    最近更新 更多