【问题标题】:IsMouseOver Trigger - Unexpected behavior when using PathIsMouseOver 触发器 - 使用路径时的意外行为
【发布时间】:2017-07-11 17:28:52
【问题描述】:

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

在下面的代码中,当设置了边框背景属性时,将在 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>

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

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

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

    【讨论】:

    • 只是详细说明为什么,面板需要画笔或填充来创建hittestvisibility 区域来触发事件。因此需要背景属性。这是正确的答案,所以 +1
    • 是的!那是票。我尝试设置 Background={TemplateBinding} 但这只有在我设置父母的背景时才有效,这基本上是相同的问题。透明虽然有效。
    • 不过……这有什么原因吗?这似乎违反直觉。
    • @kshill - 是的,因为并非面板的每个实例都需要调用事件。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多