在datagrid中单击单元格时查找datagrid列名称

时间:2010-10-18 18:51:31

标签: wpf datagrid

我想在单击一个单元格时找到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单元格的直接父级,因此它无法找到它。还有其他方法吗?

1 个答案:

答案 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;
}

这或许不是最漂亮的解决方案,但简单就是王。

希望它有所帮助!