如何从 GridViewColumn 标题获取点击事件?

Sha*_*huk 5 c# wpf

我可以从标题下的所有内容获取事件,但无法通过单击标题获取事件。这是 XAML;请注意该事件是针对整个 ListView 的,因此它应该在单击任何内容时激活:

<ListView x:Name="myListView" MouseLeftButtonUp="myListView_MouseLeftButtonUp" Margin="10">
    <ListView.View>
        <GridView>
            <GridView.Columns>
                <GridViewColumn Header="File Path"
                                DisplayMemberBinding="{Binding Path=Path}"  />
                <GridViewColumn Header="File Size"
                                DisplayMemberBinding="{Binding Path=Size}" />
            </GridView.Columns>
        </GridView>
    </ListView.View>
</ListView>
Run Code Online (Sandbox Code Playgroud)

而且事件本身非常简单。只是告诉我发生了一些事情:

    private void myListView_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        string output = sender.ToString();
        MessageBox.Show(output);
    } 
Run Code Online (Sandbox Code Playgroud)

单击标题下的任何位置都可以完美响应:
“System.Windows.Controls.ListView Items.Count:0”

单击“文件路径”标题什么也不做。单击“文件大小”标题什么也不做。

MSDN 说:https ://msdn.microsoft.com/en-us/library/vstudio/ms745786( v= vs.100)
.aspx

<ListView x:Name='lv' Height="150" HorizontalAlignment="Center" VerticalAlignment="Center" 
GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler">
Run Code Online (Sandbox Code Playgroud)

Visual Studio 说没有 GridViewColumnHeader 这样的东西,所以 MSDN 上的代码都不起作用。

Sle*_*mer 4

这就是 WPF UI 事件默认的工作方式。它们冒泡。如果有人沿途吃掉了消息(这就是按钮类型控件所做的),更高级别的控件将无法获取它。您可以使用该活动的预览版本,也可以使用更简洁的方式来执行此操作:

AddHandler(GridViewColumnHeader.ClickEvent, new RoutedEventHandler(ListView_OnColumnClick));
Run Code Online (Sandbox Code Playgroud)

  • 您可以在以下位置获取它:GridViewColumnHeader columnClicked = e.OriginalSource as GridViewColumnHeader; (使用 AddHandler 方法)。 (2认同)