如何在WPF网格中识别点击的单元格?

4

我有一个 3x3 的矩阵网格。如果用户在特定的单元格上,如何在点击后识别单元格坐标?

请给予建议。谢谢。 PJ

1个回答

9

假设您正在设计一个井字棋风格的游戏,而所涉及的网格是标准的WPF Grid,我想您最好在每个单独的单元格中放置一个控件。这样,您就可以为每个单元格挂钩鼠标事件,如下所示:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid ShowGridLines="True">
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>

        <Button Grid.Column="0" Grid.Row="0" Click="ButtonClick" />
        <Button Grid.Column="1" Grid.Row="0" Click="ButtonClick" />
        <Button Grid.Column="2" Grid.Row="0" Click="ButtonClick" />

        <Button Grid.Column="0" Grid.Row="1" Click="ButtonClick" />
        <Button Grid.Column="1" Grid.Row="1" Click="ButtonClick" />
        <Button Grid.Column="2" Grid.Row="1" Click="ButtonClick" />

        <Button Grid.Column="0" Grid.Row="2" Click="ButtonClick" />
        <Button Grid.Column="1" Grid.Row="2" Click="ButtonClick" />
        <Button Grid.Column="2" Grid.Row="2" Click="ButtonClick" />

    </Grid>
</Window>

在你的代码后台:

private void ButtonClick(object sender, RoutedEventArgs e)
{
    Button _btn = sender as Button;

    int _row = (int)_btn.GetValue(Grid.RowProperty);
    int _column = (int)_btn.GetValue(Grid.ColumnProperty);
    MessageBox.Show(string.Format("Button clicked at column {0}, row {1}", _column, _row));
}

如果您在每个单元格中都有一个UIElement,则此方法有效,如果没有,则我提供了一种解决方案:https://dev59.com/g2w15IYBdhLWcg3w1_UN#20511247 - markmnl
很好!我目前正在使用WPF创建一个井字棋游戏...真的很想避免使用九个按钮处理程序,一直在寻找类似这样的东西!非常感谢 :-) - Simon Bosley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接