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>

ボタンがコンテナにバブリングするのを防ぐために、ボタンのタップイベントを処理する方法はありますか?他のアイデアはありますか?

4

2 に答える 2

5

In your Container_Tapped event handler you could check the RoutedEventArgs.OriginalSource Property. If e.OriginalSource is a descendant of your button do nothing.

For that Visual.IsDescendantOf Method could be helpful.

于 2012-12-12T23:31:08.457 に答える
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
于 2015-07-30T23:18:41.987 に答える