IsMouseOver触发器 - 使用路径

时间:2017-07-11 17:28:52

标签: 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>

1 个答案:

答案 0 :(得分:5)

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

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