我如何捕获DataGrid列标题上的“单击”事件

问题描述 投票:9回答:2

。NET 4附带的DataGrid似乎不包含列和行标题单击的事件。我想接收列标题单击的事件,因为我想提供自己的排序行为并关闭默认排序,这是因为我的视图模型是一个分页模型,一次仅显示25/50/100行,默认排序将仅对当前页面进行排序。

现在,我可以创建一个新的DataGridColumnHeader样式,其中包含一个可单击的元素并设置ColumnHeaderStyle,尽管这似乎很痛苦,因为我将很难弄清被单击的列等内容。

还有其他人遇到这个问题并解决了吗?

.net wpf .net-4.0
2个回答
29
投票

标题只是按钮。像任何按钮一样,您可以注册Click事件以捕获这些点击。只需设置一个针对DataGridColumnHeader的样式并添加一个Click事件处理程序即可。然后,在处理程序中,您可以直接通过sender访问标头。然后,您可以获取与该标头关联的Column以及与之关联的其他信息。

<DataGrid>
    <DataGrid.Resources>
        <Style TargetType="DataGridColumnHeader">
            <EventSetter Event="Click" Handler="columnHeader_Click" />
        </Style>
    </DataGrid.Resources>
</DataGrid>

然后输入代码:

private void columnHeader_Click(object sender, RoutedEventArgs e)
{
    var columnHeader = sender as DataGridColumnHeader;
    if (columnHeader != null)
    {
        // do stuff
    }
}

[进一步查看DataGrid,我注意到有一个ColumnHeaderStyle属性。我认为最好通过此属性来应用样式。

ColumnHeaderStyle

0
投票

也有可能这样做以编程方式

<DataGrid>
    <DataGrid.ColumnHeaderStyle>
        <Style TargetType="DataGridColumnHeader">
            <EventSetter Event="Click" Handler="columnHeader_Click" />
        </Style>
    </DataGrid.ColumnHeaderStyle>
</DataGrid>

[当用户使用鼠标左键单击标题行时,将调用方法“ TestDataGrid_HeaderRowClick”。

© www.soinside.com 2019 - 2024. All rights reserved.