无法在样式中设置自定义依赖项属性

时间:2016-09-07 09:06:19

标签: c# wpf xaml

我编写了一个包含许多依赖项属性的自定义控件。如果我使用如下的XAML,一切正常:

<ProgressDial DialStart="Top" OutlineColor="Red" ... />

但是如果我尝试在一个样式中设置属性,那么我遇到了一个问题,即: -

<Style x:Key="ProgressDialStyle" TargetType="{x:Type controls:ProgressDial}">
    <Setter Property="DialStart" Value="Top" />
    <Setter Property="OutlineColor" Value="Red" />
</Style>

除了一个DP之外的所有DP都可以正常设置 - 出于某种原因,DialStart属性设置器在XAML编辑器中得到一个波形,并显示以下消息:

  

属性“DialStart”不是DependencyProperty。要在标记中使用,必须在目标类型上公开非附加属性,并使用可访问的实例属性“DialStart”。对于附加属性,声明类型必须提供静态“GetDialStart”和“SetDialStart”方法。

如果我尝试运行该应用程序,我会收到一条带有此消息的XamlParseException:

  

值不能为空。参数名称:property

Intellisense正在“看到”DP很好 - DialStart出现在可用属性列表中,我可以调用可用值(顺便提一下,DialStart是一个枚举)。

以下是我的用户控件中的DialStart DP代码:

    public static readonly DependencyProperty DialStartProperty = DependencyProperty.Register(
        "DialStartProperty",
        typeof(DialStart),
        typeof(ProgressDial),
        new PropertyMetadata(DialStart.Top));

    public DialStart DialStart
    {
        get { return (DialStart)GetValue(DialStartProperty); }
        set { SetValue(DialStartProperty, value); }
    }

顺便说一下,DialStart类型是枚举。

这是一个其他一个其他DP的例子, 很高兴在一个风格中设置: -

    public static readonly DependencyProperty OutlineColorProperty = DependencyProperty.Register(
        "OutlineColor",
        typeof(Brush),
        typeof(ProgressDial),
        new PropertyMetadata(new SolidColorBrush(Colors.WhiteSmoke)));

    public Brush OutlineColor
    {
        get { return (Brush)GetValue(OutlineColorProperty); }
        set { SetValue(OutlineColorProperty, value); }
    }

我尝试用单独的GetDialStart()和SetDialStart()方法替换DialStart属性,但没有区别。 (另一方面,我很好奇为什么有两种方法来暴露DP?)。

0 个答案:

没有答案