wpf при наведении курсора в стеке
У меня есть элемент вкладки, заголовок имеет следующую форму: image_margin_textblock.
Триггер IsMouseOver работает правильно, когда курсор мыши находится над изображением, а также над текстовым блоком. Но когда курсор мыши находится над полем между изображением и текстовым блоком, триггер IsMouseOver не срабатывает. Это создает раздражающий эффект мерцания.
У вас есть идеи, как добиться триггера при наведении курсора мыши?
Вот код:
<TabItem.Header>
<ContentControl>
<ContentControl.Template>
<ControlTemplate>
<StackPanel x:Name="sp0" Orientation="Horizontal">
<StackPanel x:Name="sp1" Orientation="Horizontal" Background="Blue">
<Image VerticalAlignment="Center" HorizontalAlignment="Center" Source="tab1.png"/>
</StackPanel>
<TextBlock Margin="10,0,0,0" Text="Tab1" VerticalAlignment="Center"/>
</StackPanel>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}" Value="True">
<Setter TargetName="sp1" Property="StackPanel.Background" Value="Green"/>
</DataTrigger>
<Trigger SourceName="sp0" Property="IsMouseOver" Value="True">
<Setter TargetName="sp1" Property="StackPanel.Background" Value="Green"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</ContentControl.Template>
</ContentControl>
Спасибо.
2 ответа
Задавать Background
на внешней панели стека Transparent
так что поле также участвует в HitTest (то есть реагирует на события мыши).
Прямо сейчас только изображение и область TextBlock реагируют на событие MouseOver. Установка фона на прозрачный будет работать.
<StackPanel x:Name="sp0" Orientation="Horizontal" Background="Transparent">
Установите фон вашей StackPanel на Transparent
, Это делает его видимым для проверки удара.
<StackPanel x:Name="sp0" Orientation="Horizontal" Background="Transparent">
<StackPanel x:Name="sp1" Orientation="Horizontal" Background="Blue">
<Image VerticalAlignment="Center" HorizontalAlignment="Center" Source="tab1.png"/>
</StackPanel>
<TextBlock Margin="10,0,0,0" Text="Tab1" VerticalAlignment="Center"/>
</StackPanel>