datatrigger на перечислении для изменения изображения


у меня есть кнопка с фиксированным фоновым изображением и хотел бы показать небольшое наложенное изображение поверх него. Какое наложение изображения выбрать, зависит от свойства зависимости (LapCounterPingStatus) соответствующего viewmodel.

вот что я получил до сих пор:

<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);
        }
    }
}

прямо сейчас, изображение наложения вообще не отображается. Что может быть неправильно?


обновление

окно трассировки моей IDE показывает System.ArgumentException и System.FormatException. Может ли источником проблемы быть неизвестный тип перечисления PingStatus im XAML?

1 74

1 ответ:

вам нужно 2 вещи, чтобы получить эту работу:

1 - Добавить xmlns ссылка в корневом элементе вашего файла XAML на пространство имен, в котором определено ваше перечисление:

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

2 - в Value свойства DataTrigger используйте {x:Static} форма:

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

обратите внимание, что тип перечисления должен иметь префикс xmlns, определенный выше.

Edit:

если ваше перечисление объявлено внутри класса, вам нужно используйте синтаксис:

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

например:

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