2011-10-11 32 views
0

我處理用戶輸入在WPF應用程序的孫子,與RoutedEventsMouseDownMouseMove等。我已經有了一個良好的抓地力的隧道和MSDN's Routed Events Overview冒泡的工作,但我已經運行成爲一個冒泡事件的問題。獲取RoutedEvent來源爲處理器

作爲MouseDown事件冒泡到一個處理程序,MouseButtonEventArgs.Source給我的事件來自當前元素的孩子。有沒有辦法讓那個孩子認爲元素?我在想MouseButtonEventArgs.Source.Source

在這種情況下,我想盡可能將我的輸入處理放在我的應用程序中,但仍然獲取有關事件來自的初始元素的信息。

下面是一個例子:這裏點擊了名爲Grandchild的Grid,我想要處理Parent_MouseDown()中的事件。然而,在這種情況下,我得到的關於事件源的信息大概是名爲Child的grid。有沒有辦法從父母那裏獲得有關孫子的信息?

<Grid x:Name="Parent" MouseDown="Parent_MouseDown"> 
    <Grid x:Name="Child" MouseDown="Child_MouseDown"> 
     <Grid x:Name="Grandchild" MouseDown="Grandchild_MouseDown"> 
     </Grid> 
    </Grid> 
</Grid> 

請注意,這個例子是簡化的,因爲在我的應用程序中這些元素是不同的類,並且駐留在不同的文件中。提前致謝!

+0

作爲@ RV1987建議,如果鼠標正確地在其上盤旋,則路由事件參數應該已經指向'GrandChild'作爲'OriginalSource'。 –

回答

2

嘗試MouseButtonEventArgs.OriginalSource它總是指向事件冒泡的原始源。

+0

我會給你正確的答案,因爲它會讓我走上正確的道路。我現在的問題是'OriginalSource'是另一個元素,元素層次結構中的元素太遠了:)我會查看哪些元素/控件設置了「Source」並相應地執行操作。謝謝! – Tobbe