Wpf 全局事件处理程序

Wpf 全局事件处理程序,wpf,events,Wpf,Events,如何定义一个全局GridViewColumnHeader。单击项目中任何ListView.GridViewColumnHeader的处理程序 我的意思是,是否可以在app.xaml中为TargetType=GridViewColumnHeader设置样式或模板,以便项目中任何listview中的任何columnheader都会响应app.xaml.cs中的方法?尽管它不是全局事件处理程序,我只想创建一个从ListView继承的新控件,并在那里实现Click处理程序。是的,但有一个警告:可以创建一

如何定义一个全局GridViewColumnHeader。单击项目中任何ListView.GridViewColumnHeader的处理程序


我的意思是,是否可以在app.xaml中为TargetType=GridViewColumnHeader设置样式或模板,以便项目中任何listview中的任何columnheader都会响应app.xaml.cs中的方法?

尽管它不是全局事件处理程序,我只想创建一个从ListView继承的新控件,并在那里实现Click处理程序。

是的,但有一个警告:可以创建一个应用于所有GridViewColumnHeader的样式,但不能在其中设置Click事件。但是,您可以设置具有几乎完全相同结果的命令属性:

<Application.Resources>
  <Style TargetType="GridViewColumnHeader">
    <Setter Property="Command"
            Value="{x:Static local:GridViewClickHandler.ClickCommand}" />
  </Style>
  ...
请注意,如果在应用程序中的任何其他位置手动设置GridViewColumnHeader的Command属性,它将优先于样式。如果这是一个问题,您可能希望在窗口中捕获tunneling PreviewMouseDown事件,并检查每个事件的原始源是否为GridViewColumnHeader

public GridViewClickHandler
{
  public RoutedCommand ClickCommand;

  static GridViewClickHandler()
  {
    ClickCommand = new RoutedCommand("ClickCommand", typeof(GridViewClickHandler));
    CommandManager.RegisterClassCommandBinding(
      typeof(GridViewColumnHeader),
      new CommandBinding(ClickCommand, OnColumnHeaderClick));
  }

  static void OnColumnHeaderClick(object sender, ExecutedRoutedEventArgs e)
  {
    // your code here
  }
}