2

我有一个标签项,标题具有以下形式:image_margin_textblock。

当鼠标光标在图像上以及文本块上时,触发器 IsMouseOver 正常工作。但是,当鼠标光标位于 Image 和 Textblock 之间的边缘时,不会触发 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>

谢谢你。

4

2 回答 2

8

Background在外部 StackPanel 上设置为,Transparent以便边距也参与 HitTest(即响应鼠标事件)。

现在只有图像和文本块区域响应 MouseOver 事件。将背景设置为透明将起作用。

<StackPanel x:Name="sp0" Orientation="Horizontal" Background="Transparent">
于 2013-12-22T16:39:29.827 回答
5

将 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>
于 2013-12-22T16:40:19.463 回答