0

我有一个包含 2 行和 2 列的网格。每个承载 Windows 的单元格形成主机控件。当用户单击任何单元格时,我想捕获选定的单元格。我搜索并发现没有“Click”事件,但我可以使用“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);
}

有什么方法可以获取选定/单击的单元格详细信息或单元格内的子项?

4

1 回答 1

0

我认为您可能在这里走错了路……如果您只想知道单击了哪个控件,请尝试使用该VisualTreeHelper.HitTest方法。您可以在 MSDN 上的VisualTreeHelper.HitTest 方法页面上找到信息。基本上,您会执行以下操作:

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对象,直到找到您想要的对象。

于 2013-07-24T11:53:24.390 回答