IsMouseOver Trigger - 使用Path时出现意外行为

ksh*_*ill 0 c# wpf xaml

当我尝试基于IsMouseOver属性触发时,我看到了意外的行为.

在下面的代码中,当设置边框Background属性时,触发器将在Border对象上发生,但是在未设置边框背景时将在Path对象上触发.

我已经尝试在边框上设置IsHitTestVisible但这是不行的.

我确定这是有原因的,但我显然不知道.有人可以开导我吗?

<Geometry x:Key="RightArrowGeometry">M 0 0 L 3 3 L 0 6 Z</Geometry>

<Style TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <Grid>
                    <!-- <Border x:Name="TheBorder" Margin="0"> -->                 <!--TRIGGERS ONLY WHEN THE MOUSE IS OVER THE PATH OBJECT -->
                    <Border x:Name="TheBorder" Margin="0" Background="LightBlue">   <!--TRIGGERS WHEN THE MOUSE IS OVER THE BORDER OBJECT -->
                            <Path 
                                x:Name="ButtonShape"
                                Data="{StaticResource RightArrowGeometry}" 
                                Fill="Black" 
                                Stretch="Uniform">
                            </Path>
                    </Border>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True" SourceName="TheBorder">
                        <Setter Property="Margin" Value="2" TargetName="TheBorder"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

Mat*_* L. 5

如果您正在寻找边框以在IsMouseOver未设置背景时触发,请尝试将边框的背景设置为Background="Transparent".

与默认null背景相反,这将使透明背景仍然触发事件.只有将背景设置为非空值时,才会触发任何鼠标输入事件.

  • 为了详细说明*为什么*,面板需要刷子或填充来创建触发可见性的区域来触发事件.因此需要Background属性.这是正确的答案,尽管如此+1 (2认同)