【问题标题】:Cannot set DependencyProperty value through a Style无法通过样式设置 DependencyProperty 值
【发布时间】:2012-04-02 15:57:48
【问题描述】:

专家,

我编写了一个名为“DimensionLine”的自定义形状,我在 UI 的不同位置使用它。该形状由一条线组成,每一端都有一个箭头。它工作正常,但其中一个依赖属性无法通过样式设置,我只是无法弄清楚我做错了什么。

这是无法按预期工作的代码部分:

public class DimensionLine : Shape
{
    public static readonly DependencyProperty ArrowsSizeProperty =
        DependencyProperty.Register("ArrowsSize", typeof(Size), typeof(DimensionLine),
            new FrameworkPropertyMetadata(new Size(10, 10),
                FrameworkPropertyMetadataOptions.AffectsArrange | FrameworkPropertyMetadataOptions.AffectsMeasure, 
                debug)); <-- I added this to listen for changes to the property ...

    private static void debug(DependencyObject dObj, DependencyPropertyChangedEventArgs e)
    {
       // ERROR! this code never receives value from the Style. Why?
    }

    public Size ArrowsSize
    {
        get { return (Size) GetValue(ArrowsSizeProperty); }
        set { SetValue(ArrowsSizeProperty, value); }
    }
}

XAML:

<MyXaml.Resources>
    <Style x:Key="SmallDimensionLine" TargetType="{x:Type cc:DimensionLine}" BasedOn="{StaticResource DimensionLine}">
        <Setter Property="ArrowsSize" Value="4,1.5" />
    </Style>   
</MyXaml.Resources>

只是为了确保我为依赖属性元数据添加了一个回调侦听器并通过断点进行了调试,但通过样式指定的值根本没有写入它。

为了使 d-property 符合样式,还需要做其他事情吗?

谢谢

【问题讨论】:

    标签: wpf styles dependency-properties


    【解决方案1】:

    您缺少通常在创建新 WPF 自定义控件时自动添加的静态构造函数

    static DimensionLine ()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(DimensionLine ),
            new FrameworkPropertyMetadata(typeof(DimensionLine )));
    }
    

    【讨论】:

    • 将那行代码添加到构造函数中恐怕没有帮助。此外,它不是从 Shape 派生的 CustomControl。也许这就是为什么?显然我需要阅读这个。还是谢谢。
    猜你喜欢
    • 2011-12-07
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多