在XAML/WPF中防止点击事件穿透按钮

5
在我的项目中,我有一个处理点击的大型容器,并且在这个容器内还有一个按钮。我的目标是除非用户点击按钮,否则处理背景容器上所有的点击事件。不幸的是,当我点击按钮时,它会同时触发按钮的点击处理程序和容器的点击处理程序。
以下是一些示例XAML代码:
<Grid Width="250" Height="250" Fill="Red" Tapped="Container_Tapped">
    <Button Click="Button_Clicked">
        <Rectangle Width="20" Height="20" Fill="Blue" />
    </Button>
</Grid>

有没有一种方法可以处理按钮上的tap事件,以防它冒泡到容器中?还有其他想法吗?
2个回答

5

这是一个好主意。我不确定是我没有正确实现还是需要做更多的工作——原始源似乎从未是Button类型。但是因为按钮使用内容模板,这是否意味着在我的点击事件中我可能会得到TextBlocks或Rectangles或其他元素?我是否需要遍历整个树来查看按钮是否是OriginalSource的父级? - Brent Traut

0
这是一种动态的方法,在Win RT中实现它,而不需要知道按钮的确切名称(如果您有一堆按钮要处理,例如数据绑定时非常有用!)
    ' Verify that the sender is not a button (or one of its children)
    If Not e.OriginalSource.Equals(sender) Then
        Dim parentObj = VisualTreeHelper.GetParent(e.OriginalSource)
        Do While Not parentObj.Equals(sender)
            If TypeOf parentObj Is Button Then Return
            parentObj = VisualTreeHelper.GetParent(parentObj)
        Loop
    End If

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接