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

时间:2015-07-20 22:33:18

标签: 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>

事件本身很简单。告诉我发生了什么事情:

    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;标头什么也没做。

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">

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

3 个答案:

答案 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,然后可以标识列。