。NET 4附带的DataGrid
似乎不包含列和行标题单击的事件。我想接收列标题单击的事件,因为我想提供自己的排序行为并关闭默认排序,这是因为我的视图模型是一个分页模型,一次仅显示25/50/100行,默认排序将仅对当前页面进行排序。
现在,我可以创建一个新的DataGridColumnHeader
样式,其中包含一个可单击的元素并设置ColumnHeaderStyle
,尽管这似乎很痛苦,因为我将很难弄清被单击的列等内容。
还有其他人遇到这个问题并解决了吗?
标题只是按钮。像任何按钮一样,您可以注册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
也有可能这样做以编程方式:
<DataGrid>
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<EventSetter Event="Click" Handler="columnHeader_Click" />
</Style>
</DataGrid.ColumnHeaderStyle>
</DataGrid>
[当用户使用鼠标左键单击标题行时,将调用方法“ TestDataGrid_HeaderRowClick”。