Wil*_*lka 8 wpf grid mouseevent
我有一个Grid带有一些行和列的WPF ,例如
<Grid Name="myGrid" MouseMove="OnMouseMove">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
</Grid>
Run Code Online (Sandbox Code Playgroud)
使用MouseMove.cs文件中的处理程序,例如
private void OnMouseMove(object sender, MouseEventArgs e)
{
var position = e.GetPosition(myGrid);
// What row & col is the mouse over?
}
Run Code Online (Sandbox Code Playgroud)
我希望能够找到鼠标结束的网格中的哪一行和哪一列,这可能吗?
[注意:这是问题的简化版本,因此以这种方式呈现它看起来有点奇怪 - 它是网格功能之间的一些拖放的一部分]
Nic*_*las 17
我希望你已经找到了解决方案.我遇到了同样的问题,我找到了这个无人接听的帖子.所以我认为下一个会很乐意找到这个解决方案:
private void OnMouseMove(object sender, MouseEventArgs e)
{
var element = (UIElement)e.Source;
int c = Grid.GetColumn(element);
int r = Grid.GetRow(element);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
这可以完成以下操作(但不应在较大的网格上使用).它仅适用于Rows,但第二个循环可以应用于列...
Nicolas的答案只有在网格包含一些UIElements(它们在网格中的位置被确定 - 我想如果一个元素跨越几行/列时也会造成麻烦)时才有效.
private void ItemsGrid_MouseMove(object sender, MouseEventArgs e)
{
double y = e.GetPosition(ItemsGrid).Y;
double start = 0.0;
int row = 0;
foreach(RowDefinition rd in ItemsGrid.RowDefinitions)
{
start += rd.ActualHeight;
if (y < start)
{
break;
}
row++;
}
System.Diagnostics.Debug.WriteLine("Row : " + row);
}
Run Code Online (Sandbox Code Playgroud)