2014-10-30 97 views
1

当我们有这样的情况:C#/ XAML螺纹事件

<Grid x:Name="Grid1" Tapped="Grid1_OnTapped"> 
    <!-- ... --> 
    <Grid x:Name="Grid2" Tapped="Grid2_OnTapped"> 
     <!-- ... --> 
      ... 
        <Grid x:Name="Grid_n" Tapped="Grid_n_OnTapped"> 
          <!-- ... --> 
        </Grid> 
    </Grid> 
</Grid> 

当用户点击Grid_nGrid_n_OnTapped事件方法被调用,但所有父网格的所有事件方法被调用了。所以我的问题是,是否有可能以某种方式阻止,即只有在水龙头的位置在Grid1的地区而不是他的孩子/子女孩的地区时才必须调用“Grid1_OnTapped”。

回答

5

设置e.Handled = true(其中eTappedRoutedEventArgs)在Grid_n_OnTapped事件处理程序 - 它会阻止冒泡事件到元素父。

+0

它的工作原理。非常感谢你 :) – arturdev 2014-10-30 12:05:03

1

我不会试图建立一个围绕这个问题,简单地检查原始来源是正确的:

// Deny first 
if ((e.OriginalSource as Grid) != this.Grid_n) 
    return; 
// Normal handler starts here. 
+0

事情是,任何'Grid_X_OnTapped'中的发送者都是'Grid_X'。 – arturdev 2014-10-30 11:43:00

+0

对不起,我只注意到我犯了一个错误。我实际上发布了我不想发布的内容(今天不是我的一天..)。你必须检查原始来源。我编辑了答案。此代码有效。 – Fred 2014-10-30 11:46:58

+0

这个答案也是错的。因为'e.OriginalSource'可以是除Grid之外的另一个控件,例如'TextBlock'或'Image' – arturdev 2014-10-30 11:58:23