WPF - 获取当前单元格详细信息

时间:2013-07-23 15:59:04

标签: wpf grid

我有一个包含2行2列的网格。托管Windows的每个单元形成主机控制。我想在用户点击任何单元格时捕获所选单元格。我搜索过,发现没有“点击”。事件,但我可以使用' MouseDown'具有类似结果的事件。但是现在我被卡住了,因为你会认为必须有一种更容易的方式,例如“GetCurentRow'和' GetCurrentColumn'捕获选定的单元格,但没有。

我想要进一步做的是在网格的特定单元格中获取子元素。 我尝试了下面的代码,但无论我点击哪个单元格,我总是得到0行和列:

void InnerGridToContainWindowsFormsHost_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    var element = (UIElement)e.Source;
    int c = Grid.GetColumn(element);
    int r = Grid.GetRow(element);
}

有没有办法获取所选/单击的单元格详细信息或单元格内的子项?

1 个答案:

答案 0 :(得分:0)

我认为你可能会走错路线......如果你只是想知道点击了什么控件,请尝试使用VisualTreeHelper.HitTest方法。您可以在MSDN上的VisualTreeHelper.HitTest Method页面上找到相关信息。基本上,你会做类似的事情:

private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    // Get the position of the mouse pointer relative to the grid
    Point clickPoint = e.GetPosition(grid);
    HitTestResult result = VisualTreeHelper.HitTest(grid, clickPoint);
    if (result != null) 
    {
        // Do something here
    }
}

您可能还需要某种基本的递归函数来深入查看Visual个对象,直到找到所需的对象为止。