我已经定义了一个依赖项属性,它使用枚举来更新按钮的背景颜色。当它运行时,我得到一个“默认值类型与属性类型'CurrentWarningLevel'不匹配”的异常。依赖属性如下:
public enum WarningLevels
{
wlError=0,
wlWarning,
wlInfo
};
public class WarningLevelButton : Button
{
static WarningLevelButton()
{
}
public WarningLevels CurrentWarningLevel
{
get { return (WarningLevels)GetValue(WarningLevelProperty); }
set { base.SetValue(WarningLevelProperty, value); }
}
public static readonly DependencyProperty WarningLevelProperty =
DependencyProperty.Register("CurrentWarningLevel", typeof(WarningLevels), typeof(WarningLevelButton), new PropertyMetadata(false));
}
我正在尝试使用以下属性:
<Trigger Property="local:WarningLevelButton.CurrentWarningLevel" Value="wlError">
<Setter TargetName="ButtonBody" Property="Background" Value="{StaticResource CtlRedBrush}" />
<Setter TargetName="ButtonBody" Property="BorderBrush" Value="{StaticResource CtlRedBrush}" />
</Trigger>
<Trigger Property="local:WarningLevelButton.CurrentWarningLevel" Value="wlWarning">
<Setter TargetName="ButtonBody" Property="Background" Value="{StaticResource GreyGradientBrush}" />
<Setter TargetName="ButtonBody" Property="BorderBrush" Value="{StaticResource BorderBrush}" />
</Trigger>
答案 0 :(得分:1)
<强> 1)强>
因为您无法将false(bool)
投射到WarningLevels
。
请记住PropertyMetadata
的第一个参数是您的默认值。
2)你可能会遇到另一个问题。你的触发值
Value="wlError"
是一个字符串,如果没有类型转换器,也不能转换为枚举。解决这个问题的最简单方法是扩展您的价值:
<Trigger Property="local:WarningLevelButton.CurrentWarningLevel" >
<Trigger.Value>
<my:WarningLevels>wlError</my:WarningLevels>
</Trigger.Value>
<Setter TargetName="ButtonBody" Property="Background" Value="{StaticResource CtlRedBrush}" />
<Setter TargetName="ButtonBody" Property="BorderBrush" Value="{StaticResource CtlRedBrush}" />
</Trigger>