Как отключить определенное событие для элемента ListBox?
У меня есть листбокс. Я задал ему триггеры для "Мышь наведена" на элемент и для "Выбранного" элемента
Тоесть когда наводишься на элемент с ним что-то происходит( в моем случае меняются цвета) и когда он выбран тоже что-то происходит.
Из-за этого, когда я навожусь на уже выбранный элемент, изменения триггера "Мышь наведена" как бы затмевают изменения триггера "Выбранный элемент"
Я хочу чтобы при наведении на элемент, проверять выбран ли он, и если выбран то не показывать изменения, связанные с событием "Мышь наведена"
Подскажите пожалуйста, можно ли так сделать?
Вот листинг стиля листбокса:
<Style x:Key="ListBox1" TargetType="ListBoxItem">
<Setter Property="Padding" Value="5"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border x:Name="border" Background="{TemplateBinding Background}">
<StackPanel Orientation="Horizontal" Margin="15, 2">
<Border CornerRadius="3" Width="64" Height="70" Background="#393951">
<Border x:Name="icoBord" Background="{Binding Path=Background, RelativeSource={RelativeSource TemplatedParent}}">
<Image Source="{Binding ImagePath}" Width="48" Height="48"/>
</Border>
</Border>
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="14" FontFamily="Segoe UI" Foreground="#D4D4E5" Text="{Binding Name}" />
</StackPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="icoBord" Property="Background" Value="#2F325A" />
<Setter TargetName="border" Property="BorderBrush" Value="#4750D1" />
<Setter TargetName="border" Property="BorderThickness" Value="1"></Setter>
<Setter TargetName="border" Property="CornerRadius" Value="3"></Setter>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="border" Property="Background" Value="#2f2f40"/>
<Setter TargetName="border" Property="CornerRadius" Value="5"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Ответы (1 шт):
Для решения проблемы следует использовать:
<MultiTrigger>
MultiTrigger
позволяет применять изменения к элементу только в случае выполнения нескольких условий одновременно.
На всякий случай пример кода:
<MultiTrigger>
<MultiTrigger>
<Condition Property="IsMouseOver" Value="True"/>
<Condition Property="IsSelected" Value="False"/>
</MultiTrigger.Conditions>
<Setter TargetName="border" Property="Background" Value="#D9DEFD"/>
<Setter TargetName="border" Property="CornerRadius" Value="5"/>
</MultiTrigger>
Этот код исполняет два setter-а только в том случае, когда и IsMouseOver
равен True
и IsSelected
равен False
.