2014-07-10 63 views
0

我目前正在嘗試瞭解某些​​Xaml實際上是如何工作的。 XAML中看起來如下:Xaml-AttachedAttribute如何爲子節點工作?

<ListView ItemsSource="{Binding Source={StaticResource SortedEvents}}" 
      GridViewColumnHeader.Click="SortableListViewColumnHeaderClicked"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="A" DisplayMemberBinding="{Binding ...}" 
          Width="80"/> 
     </GridView> 
    </ListView.View> 
</ListView> 

我的問題是關於attached property 「GridViewColumnHeader.Click」(第二行)。它以某種方式應用於由列隱式定義的所有GridViewColumnHeaders。我試圖在後面的代碼中重新實現此功能,但是我失敗了,因爲我無法訪問GridViewColumnHeaders,即使遍歷VisualTree時也是如此...

有人能給我一個關於如何實現的指針嗎? 任何幫助將不勝感激!


簡短的回答:這不是attached attributes,但attached events。突然間,我找到了正確的教程來了解正在發生的事情!

在後面予做同樣的

listView.AddHandler(ButtonBase.ClickEvent, new RoutedEventHandler(SortableListViewColumnHeaderClicked)); 

回答

3

那些不附着性能,但routed events的代碼:

功能定義:路由事件是一種類型的事件,可以在調用處理程序的元素樹中的多個偵聽器,而不僅僅是引發事件的對象。

實現定義:路由事件是CLR事件,由一個RoutedEvent類的實例支持並由Windows Presentation Foundation(WPF)事件系統處理。

具體attached events

XAML語言還定義了一種稱爲附加事件的特殊類型的事件。附加事件使您能夠將特定事件的處理程序添加到任意元素。處理事件的元素不需要定義或繼承附加事件,並且可能引發事件的對象和目標處理實例都不必定義或以其他方式將該事件「擁有」爲類成員。

WPF輸入系統廣泛使用附加事件。但是,幾乎所有這些附加事件都通過基本元素轉發。輸入事件然後顯示爲等效的非附加路由事件,它們是基本元素類的成員。例如,通過在該UIElement上使用MouseDown,可以更輕鬆地在任何給定的UIElement上處理底層附加事件Mouse.MouseDown,而不是在XAML或代碼中處理附加事件語法。


以執行代碼相同的邏輯,你就ListView打電話AddHandler並通過ClickEvent領域。

+0

這是正確的指針。感謝您節省了我幾個小時跑向錯誤的方向! –

相關問題