问候,
我有一个Grid,我根据用户提供的数据添加行和列。
现在我希望有一个事件可以按行和列捕获鼠标点击的位置。 因此,当我单击第2行的第5列时,我希望在我的代码中得到完全相同的信息。
然而,我到目前为止所有的都是args.OriginalSource = {System.Windows.Controls.Grid}
有没有办法实现这个目标?
的Xaml:
<Grid Background="White" x:Name="MainSchedular">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="33" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="33">
<ColumnDefinition Width="33">
<ColumnDefinition Width="33">
</Grid>
代码背后:
this.MouseLeftButtonDown += (se, eas) =>
{
//some code here that captures the row and column position
};
答案 0 :(得分:1)
万一人们想知道如何: 我设法通过创建一个按钮并放置在网格的左上角来实现这一目的。
使用此按钮作为MouseButtonEventsArgs.GetPosition的参考,然后我可以计算我点击的行和列:
double rowheigth = 0, columnlength = 0;
int row = 0, column = 0;
if (pos.X > this.TheGrid.ColumnDefinitions[0].ActualWidth && pos.Y > this.TheGrid.RowDefinitions[0].ActualHeight)
{
while (rowheigth + this.TheGrid.RowDefinitions[row].ActualHeight < pos.Y)
{
rowheigth += this.TheGrid.RowDefinitions[row].ActualHeight;
row++;
}
while (columnlength + this.TheGrid.ColumnDefinitions[column].ActualWidth < pos.X)
{
columnlength += this.TheGrid.ColumnDefinitions[column].ActualWidth;
column++;
}
}