我想在单击一个单元格时找到datagrid列标题。我使用了以下代码
private void grid1_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
DependencyObject dep = (DependencyObject)e.OriginalSource;
while ((dep != null) &&
!(dep is DataGridColumnHeader))
{
dep = VisualTreeHelper.GetParent(dep);
}
if (dep == null)
return;
if (dep is DataGridColumnHeader)
{
DataGridColumnHeader columnHeader = dep as DataGridColumnHeader;
if (columnHeader.ToString() == "Adv Comments")
{
MessageBox.Show(columnHeader.Column.Header.ToString());
}
}
if (dep is DataGridCell)
{
DataGridCell cell = dep as DataGridCell;
}
}
但是列标题不是datagrid单元格的直接父级,因此它无法找到它。还有其他方法吗?
答案 0 :(得分:8)
点击的原始源并没有真正连接到所谓的项容器(请参阅DataGrid.ItemContainerGenerator),所以试图让自己处理好自己的状态,尽管一个好主意不会得到你到目前为止。
对于一个非常愚蠢的简单解决方案,您可以使用它的知识,只需单击一个单元格,然后使用该单击的单元格来检索列,如下所示:
private void DataGrid_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
// First check so that we´ve only got one clicked cell
if(myGrid.SelectedCells.Count != 1)
return;
// Then fetch the column header
string selectedColumnHeader = (string)myGrid.SelectedCells[0].Column.Header;
}
这或许不是最漂亮的解决方案,但简单就是王。
希望它有所帮助!