如何在WPF网格视图中查找所选单元格的像素坐标

时间:2011-05-06 16:38:57

标签: wpf datagrid location cell dimensions

我已经尝试了几天来回答这个问题。我发现代码片段已接近但没有给我我需要的东西。

我需要能够识别WPF数据网格中特定单元格的x和y坐标。单元格将是选定的单元格。我还需要能够确定该单元格的确切大小。

这样我可以在用户编辑时对该单元格添加编辑器控件,以便我接受用户输入。

必须以这种方式完成的原因是我需要按行编辑不同的编辑器。 datagrid中有几列。一列特别要求用户提供一个值。根据另一列的内容,用户需要在值列中提供的输入类型发生更改。文本输入或数字输入需要文本框。某些行是布尔值,用户需要从复选框中进行选择。某些行具有预定义值,用户需要组合框。还有文件路径行,我想要一个文件打开对话框自动出现并将选定的文件名放入单元格。所以我不能只使用datagrid中的内置编辑器,因为它允许我按列指定格式,但不能按行指定。当然我提前知道行的内容所以需要在运行时完成。

我能够移动编辑器控件并使它们可见且不可见。 我已经能够获得所选单元格左侧的X坐标。 我也能找到所选单元格的宽度。

单元格的Y坐标和单元格的高度我尝试过几种不同的方式,但没有一种方法有效。

我已经找到了如何做到这一点的逻辑流程。我在窗体表单应用程序中运行了一个示例。 100行代码和大约30分钟,它工作得很好。我一直试图弄清楚如何在WPF中做同样的事情好几天。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

这是一个不太优雅的解决方案:

private void grid_MouseDown(object sender, MouseButtonEventArgs e)
    {
        Point point;
        Point point2;

        TextBlock tb = (TextBlock)e.OriginalSource;
        DataGridCell dgc = (DataGridCell)tb.Parent;
        point = e.GetPosition(dgc);
        point2 = e.GetPosition(this);
        double cell_width = dgc.ActualWidth;
        double absolute_x = point2.X - point.X;
    }

只有X在那里,但对Y来说是相同的。主要的问题是需要一个开关来确定源(TextBlock,Border等),并且当单击第二个单元时这是有效的时间(尽管可能会因属性而改变)。