在enum上的datatrigger改变图像

我有一个固定的背景图像的button,并希望显示一个小的覆盖图像的顶部。 要select哪个叠加图像取决于相应视图LapCounterPingStatus的依赖属性( LapCounterPingStatus )。

这是我到目前为止:

 <Button> <Grid> <Image Stretch="None"> <!-- Background Image --> <Image.Style> <Style TargetType="{x:Type Image}"> <Setter Property="Source" Value="/Images/Pingn.png"/> </Style> </Image.Style> </Image> <Image Stretch="None" Panel.ZIndex="1"> <!-- Small Overlay Image --> <Image.Style> <Style TargetType="{x:Type Image}"> <Style.Triggers> <DataTrigger Binding="{Binding Path=LapCounterPingStatus}" Value="PingStatus.PING_UNKNOWN"> <Setter Property="Source" Value="/Images/RefreshOverlayn.png"/> </DataTrigger> <DataTrigger Binding="{Binding Path=LapCounterPingStatus}" Value="PingStatus.PING_FAILURE"> <Setter Property="Source" Value="/Images/ErrorOverlayn.png"/> </DataTrigger> <DataTrigger Binding="{Binding Path=LapCounterPingStatus}" Value="PingStatus.PING_SUCCESS"> <Setter Property="Source" Value="/Images/CheckmarkOverlayn.png"/> </DataTrigger> </Style.Triggers> </Style> </Image.Style> </Image> </Grid> </Button> 

我的viewmodel的相关部分

 public class ConfigurationViewModel { public enum PingStatus { PING_UNKNOWN, PING_SUCCESS, PING_FAILURE }; public PingStatus LapCounterPingStatus { get { return _lapCounterPingStatus; } set { _lapCounterPingStatus = value; RaisePropertyChanged(LapCounterPingStatusPropertyName); } } } 

现在,根本不显示重叠图像。 什么可能是错的?


UPDATE

我的IDE的跟踪窗口显示System.ArgumentExceptionSystem.FormatException 。 问题来源可能是未知types的枚举PingStatus的XAML?

你需要2件事才能得到这个工作:

1 – 在XAML文件的根元素中添加一个xmlns引用,将其添加到定义了Enum的命名空间中:

 <UserControl ... xmlns:my="clr-namespace:YourEnumNamespace;assembly=YourAssembly"> 

2 – 在DataTriggerValue属性中,使用{x:Static}表单:

  <DataTrigger Binding="{Binding Path=LapCounterPingStatus}" Value="{x:Static my:PingStatus.PING_UNKNOWN}"> 

请注意,枚举types必须以前面定义的xmlns前缀作为前缀。

编辑:

如果你的Enum是在一个类中声明的,你需要使用下面的语法:

{x:Static namespace:ClassName+EnumName.EnumValue}

例如:

{x:Static my:ConfigurationViewModel+PingStatus.PING_UNKNOWN}