我可以从标题下的所有内容中获取事件,但是我无法通过点击标题来获取事件。这是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>
事件本身很简单。告诉我发生了什么事情:
private void myListView_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
string output = sender.ToString();
MessageBox.Show(output);
}
点击标题下方的任何位置都会完美响应:
&#34; System.Windows.Controls.ListView Items.Count:0&#34;
单击&#34;文件路径&#34;标头什么也没做。单击&#34;文件大小&#34;标头什么也没做。
<ListView x:Name='lv' Height="150" HorizontalAlignment="Center" VerticalAlignment="Center"
GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler">
Visual Studio说没有GridViewColumnHeader这样的东西,所以MSDN上的代码都不起作用。
答案 0 :(得分:1)
默认情况下WPF UI事件的工作原理。他们冒泡了。如果有人在途中吃掉了消息(这是按钮类型控件的作用),那么更高级别的控件就不会得到它。您可以使用事件的预览版本,也可以使用更简洁的方法:
AddHandler(GridViewColumnHeader.ClickEvent, new RoutedEventHandler(ListView_OnColumnClick));
答案 1 :(得分:0)
即使有点晚,但在 XAML 中,您可以执行以下操作:
<!-- ListView -->
<GridView AllowsColumnReorder="True">
<GridViewColumn Width="220">
<GridViewColumnHeader Content="{DynamicResource ResourceKey=explorer_column_name}" Command="{Binding Path=ISortBy}" CommandParameter="{x:Static enu:SortType.Name}"/>
<GridViewColumn.CellTemplate>
//...
</GridViewColumn.CellTemplate>
</GridViewColumn>
//..
</GridView>
答案 2 :(得分:-1)
AddHandler应该在ListView上调用,例如:
myListView.AddHandler(GridViewColumnHeader.ClickEvent, new RoutedEventHandler(myListView_OnColumnClick));
然后可以将e.OriginalSource强制转换为myListView_OnColumnClick中的GridViewColumnHeader,然后可以标识列。