visual tutorial studio presentacion metodos ejemplos c# wpf

c# - tutorial - datatrigger en enum para cambiar la imagen



wpf vs windows forms (1)

Necesitas 2 cosas para que esto funcione:

1 - Agregue una referencia xmlns en el elemento raíz de su archivo XAML, al espacio de nombres donde se define su Enum:

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

2 - en la propiedad Value del DataTrigger , use el formulario {x:Static} :

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

Tenga en cuenta que el tipo Enum debe ir precedido del prefijo xmlns que definió anteriormente.

Editar:

Si tu Enum se declara dentro de una clase, debes usar la sintaxis:

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

por ejemplo:

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

Tengo un botón con una imagen de fondo fija y me gustaría mostrar una pequeña imagen superpuesta encima. La imagen de superposición que se debe elegir depende de una propiedad de dependencia ( LapCounterPingStatus ) del modelo de vista correspondiente.

Esto es lo que obtuve hasta ahora:

<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>

Partes relevantes de mi modelo de vista

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

En este momento, no se muestra ninguna imagen de superposición. ¿Qué podría estar mal?

ACTUALIZAR

La ventana Trace de mi IDE muestra System.ArgumentException y System.FormatException . ¿Podría el origen del problema ser un tipo desconocido de enumeración PingStatus im the XAML?