Dot-Net

如何擷取 DataGrid 列標題上的“點擊”事件

  • June 7, 2021

.NET 4 附帶的似乎DataGrid不包含列標題和行標題點擊的事件。我想接收列標題點擊的事件,因為我想提供自己的排序行為並關閉預設排序,這是因為我的視圖模型是一個分頁模型,一次只能顯示 25/50/100 行,預設排序當然只會對目前頁面進行排序。

現在我可以創建一個DataGridColumnHeader包含可點擊元素和 set 的新樣式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屬性。我認為通過此屬性應用樣式會更好。

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

引用自:https://stackoverflow.com/questions/5895803