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 ответ:
вам нужно 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}