在左鼠标按钮上获取网格单元格信息

时间:2011-04-04 13:24:04

标签: c# silverlight grid mouseevent

问候,

我有一个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
};

1 个答案:

答案 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++;
    }
}