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?