使用可点击的矩形绘制网格

时间:2011-06-20 12:24:11

标签: .net wpf

我需要在屏幕上绘制一个网格,并且每次点击该用户都会在该特定区域上绘制图像。

我不知道如何绘制该网格。方块将具有固定的大小(32x32像素),但它们的数量将是可变的。我可以有一个NxN单元网格。此外,此网格需要位于滚动窗格中,因为其大小可变。 有谁知道如何绘制该网格并点击方块?

我正在使用WPF。

感谢。

2 个答案:

答案 0 :(得分:1)

使用ScrollViewer启用滚动功能

<ScrollViewer x:Name="layoutRoot" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"/>

然后生成一个Grid对象:

private Grid GenerateGrid(int rows, int columns, int cellWidth, int cellHeight)
{
    Grid grid = new Grid();
    grid.Width = columns * cellWidth;
    grid.Height = rows * cellHeight;

    for (int i = 0; i < rows; i++)
    {
        grid.RowDefinitions.Add(new RowDefinition());
    }

    for (int i = 0; i < columns; i++)
    {
        grid.ColumnDefinitions.Add(new ColumnDefinition());
    }

    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < columns; j++)
        {
            var cell = new Border();
            cell.MouseDown += Cell_MouseDown;
            Grid.SetRow(cell, i);
            Grid.SetColumn(cell, j);
            cell.Background = Brushes.Transparent;

               cell.BorderBrush = Brushes.Gray;
               cell.BorderThickness = new Thickness(1);
            grid.Children.Add(cell);
        }
    }

    return grid;
}

private void Cell_MouseDown(object sender, MouseButtonEventArgs e)
{
    var cell = sender as Border; //You can use this object
}

答案 1 :(得分:0)

在大多数需要了解鼠标点击的情况下,我倾向于将Button子类化。我发现管理鼠标处理的基本事件有点烦人,但这样做也会起作用,如果对你重要的话会更轻。无论哪种方式,如果您进行自定义或用户控制,您应该能够拥有所需的一切。您可以覆盖OnClick(如果您是子类Button)或OnPreviewMouseLeftButtonDown,OnPreviewMouseLeftButtonUp,OnMouseEnter和OnMouseLeave中的所有四个,如果您宁愿自己管理它。仅捕获鼠标是不够的,因为您需要知道鼠标是否也在您的控件中。我建议您观察按钮的标准点击行为以复制它,因为它有点复杂。

您可能需要查看UniformGrid以查看它是否符合您的网格需求,因为您希望拥有可变数量的列和行。您可以设置任意一个的数量,它将使孩子们在它们之间流动。无论您在那里使用什么控件,都可以放置在ScrollViewer中以获得滚动功能。