我可以从标题下的所有内容获取事件,但无法通过单击标题获取事件。这是 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 上的代码都不起作用。
这就是 WPF UI 事件默认的工作方式。它们冒泡。如果有人沿途吃掉了消息(这就是按钮类型控件所做的),更高级别的控件将无法获取它。您可以使用该活动的预览版本,也可以使用更简洁的方式来执行此操作:
AddHandler(GridViewColumnHeader.ClickEvent, new RoutedEventHandler(ListView_OnColumnClick));
Run Code Online (Sandbox Code Playgroud)