我有一个分为3行和3列的WPF网格,我无法找到一种方法来获取鼠标点击网上的行和列号,哦,如果有可能它会更好我的程序,这部分将在代码而不是XAML,这是我的简单网格:
<Grid Name="GridCtrl" ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition Height="3*" />
<RowDefinition Height="3*" />
<RowDefinition Height="3*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*" />
<ColumnDefinition Width="3*" />
<ColumnDefinition Width="3*" />
</Grid.ColumnDefinitions>
</Grid>
Run Code Online (Sandbox Code Playgroud)
面对同样的问题,我提出了这个解决方案:
XAML:
<Grid Name="myGrid" Background="Transparent" PreviewMouseLeftButtonDown="OnPreviewMouseLeftButtonDown">
Run Code Online (Sandbox Code Playgroud)
注意:Grid必须给出一个背景来提升鼠标按下事件,请参阅:当单击单元格中没有UIElemets时,如何让Grid提升MouseDown事件?
代码隐藏:
private void OnPreviewMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if(e.ClickCount == 2) // for double-click, remove this condition if only want single click
{
var point = Mouse.GetPosition(myGrid);
int row = 0;
int col = 0;
double accumulatedHeight = 0.0;
double accumulatedWidth = 0.0;
// calc row mouse was over
foreach (var rowDefinition in myGrid.RowDefinitions)
{
accumulatedHeight += rowDefinition.ActualHeight;
if (accumulatedHeight >= point.Y)
break;
row++;
}
// calc col mouse was over
foreach (var columnDefinition in myGrid.ColumnDefinitions)
{
accumulatedWidth += columnDefinition.ActualWidth;
if (accumulatedWidth >= point.X)
break;
col++;
}
// row and col now correspond Grid's RowDefinition and ColumnDefinition mouse was
// over when double clicked!
}
}
Run Code Online (Sandbox Code Playgroud)
我以前从未使用过 WPF Grid,尽管使用上面的链接作为示例,我认为类似的操作应该可以做到这一点:
将其添加到您的初始化方法中:
this.GridCtrl.MouseDown += new MouseButtonEventHandler(GridCtrl_MouseDown);
Run Code Online (Sandbox Code Playgroud)
并添加新方法来处理该事件:
private void GridCtrl_MouseDown(object sender, MouseButtonEventArgs e)
{
if (sender != null)
{
Grid _grid = sender as Grid;
int _row = (int)_grid.GetValue(Grid.RowProperty);
int _column = (int)_grid.GetValue(Grid.ColumnProperty);
MessageBox.Show(string.Format("Grid clicked at column {0}, row {1}", _column, _row));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20213 次 |
| 最近记录: |