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

| 我已经尝试了几天来回答这个问题。我已经找到了一些代码片段,它们接近但没有满足我的需求。 我需要能够识别WPF数据网格中特定单元格的x和y坐标。该单元格将成为所选单元格。我还需要能够确定该单元的确切大小。 这样一来,我可以在用户编辑该单元格时在该单元格上叠加一个编辑器控件,这样我就可以接受用户输入。 之所以必须这样做,是因为我需要逐行使用不同的编辑器。 datagrid中有几列。特别是一栏要求用户提供一个值。根据另一列的内容,用户需要在值列中提供的输入类型会发生变化。文本输入或数字输入需要一个文本框。有些行是布尔值,用户需要从复选框中进行选择。一些行具有预定义的值,并且用户需要一个组合框。还有文件路径行,我希望自动打开一个文件打开对话框,并将所选文件名放入单元格中。所以我不能只使用datagrid中的内置编辑器,因为它允许我按列指定格式,但不能按行指定格式。当然,我不提前知道行的内容,因此需要在运行时完成。 我已经能够移动编辑器控件,并使它们可见和不可见。 我已经能够获得所选单元格左侧的X坐标。 我还能够找到所选单元格的宽度。 我以几种不同的方式尝试过的单元格的Y坐标和单元格的高度,但没有一个起作用。 我已经弄清楚了如何执行此操作的逻辑流程。我做了一个在窗体应用程序中运行的示例。 100行代码和大约30分钟,它运行良好。几天来,我一直在努力寻找如何在WPF中执行相同的操作。任何帮助,将不胜感激。     
已邀请:
这不是一个非常优雅的解决方案:
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等),并且在第二个单元格中单击时可以工作时间(尽管可能随属性而变化)。     

要回复问题请先登录注册