在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.ArgumentException
和System.FormatException
。 问题来源可能是未知types的枚举PingStatus
的XAML?
你需要2件事才能得到这个工作:
1 – 在XAML文件的根元素中添加一个xmlns
引用,将其添加到定义了Enum的命名空间中:
<UserControl ... xmlns:my="clr-namespace:YourEnumNamespace;assembly=YourAssembly">
2 – 在DataTrigger
的Value
属性中,使用{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}