我编写了一个包含许多依赖项属性的自定义控件。如果我使用如下的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?)。