2014-10-30 102 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