Xaml-AttachedAttribute如何为子节点工作
本文关键字:子节点 工作 Xaml-AttachedAttribute | 更新日期: 2023-09-27 18:12:26
我目前正在尝试理解Xaml的某些部分实际上是如何工作的。Xaml如下所示:
<ListView ItemsSource="{Binding Source={StaticResource SortedEvents}}"
GridViewColumnHeader.Click="SortableListViewColumnHeaderClicked">
<ListView.View>
<GridView>
<GridViewColumn Header="A" DisplayMemberBinding="{Binding ...}"
Width="80"/>
</GridView>
</ListView.View>
</ListView>
我的问题是关于附加属性"GridViewColumnHeader。单击"(第二行)"。它以某种方式应用于所有由列隐式定义的GridViewColumnHeaders。我试图在代码后面重新实现这个功能,但我失败了,因为我没有访问GridViewColumnHeaders,即使遍历VisualTree…
有人能给我一个指针在这是如何实现的?任何帮助将非常感激!
简短的回答:不是附加属性,而是附加事件。突然间,我找到了正确的教程来理解发生了什么!
在后面的代码中,我对 做了同样的处理listView.AddHandler(ButtonBase.ClickEvent, new RoutedEventHandler(SortableListViewColumnHeaderClicked));
这些不是附加属性,而是路由事件:
函数定义:路由事件是一种事件类型,它可以调用元素树中多个侦听器的处理程序,而不仅仅是引发该事件的对象。
实现定义:路由事件是一个CLR事件,由RoutedEvent类的实例支持,并由Windows Presentation Foundation (WPF)事件系统处理。
特别附加的事件。
XAML语言还定义了一种特殊类型的事件,称为附加事件。附加事件使您能够将特定事件的处理程序添加到任意元素。处理事件的元素不需要定义或继承附加的事件,可能引发事件的对象和目标处理实例都必须定义或"拥有"该事件。该事件作为类成员。WPF输入系统广泛使用附加事件。然而,几乎所有这些附加的事件都是通过基本元素转发的。然后,输入事件显示为基元素类成员的等效非附加路由事件。例如,底层附加事件Mouse。通过在任何给定的UIElement上使用MouseDown,而不是在XAML或代码中处理附加的事件语法,可以更容易地处理MouseDown。
要在代码中执行相同的逻辑,您可以在ListView
上调用AddHandler
并传递ClickEvent
字段。