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>
Другие вопросы по тегам