我有一个包含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);
}
有没有办法获取所选/单击的单元格详细信息或单元格内的子项?
答案 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
个对象,直到找到所需的对象为止。