Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用可单击的矩形绘制网格_.net_Wpf - Fatal编程技术网

.net 使用可单击的矩形绘制网格

.net 使用可单击的矩形绘制网格,.net,wpf,.net,Wpf,我需要在我的屏幕上画一个网格,用户每次点击都会在这个特定区域上画一幅图像 我不知道怎么画网格。正方形的大小是固定的(32x32像素),但其数量是可变的。我可以有一个NxN单元格网格。此外,该网格需要位于滚动窗格中,因为其大小是可变的。 有人知道如何绘制网格并点击正方形吗 我用的是WPF 谢谢。使用ScrollViewer启用滚动功能 <ScrollViewer x:Name="layoutRoot" VerticalScrollBarVisibility="Auto" Horizontal

我需要在我的屏幕上画一个网格,用户每次点击都会在这个特定区域上画一幅图像

我不知道怎么画网格。正方形的大小是固定的(32x32像素),但其数量是可变的。我可以有一个NxN单元格网格。此外,该网格需要位于滚动窗格中,因为其大小是可变的。 有人知道如何绘制网格并点击正方形吗

我用的是WPF


谢谢。

使用
ScrollViewer
启用滚动功能

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

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


您可能希望查看UniformGrid,看看它是否满足您的网格需求,因为您希望具有可变数量的列和行。您可以设置其中一个的数量,它将在它们之间传递子对象。无论您在那里使用什么控件,都可以将其放置在ScrollViewer中以获得滚动功能。

使用按钮的问题在于,用户必须能够使用鼠标(拖动鼠标指针)一次选择多个单元格。或者这不是一个问题?我不知道这是一个要求。这确实增加了足够的复杂性,可能需要观看鼠标事件。在将内容添加到单元格后,您应该尝试预览版本的事件,以确保实际获得预期的事件。我明白了。谢谢你抽出时间。正如我看到的,它不会打印线条,对吗?还有一个问题,您可以看到我是C#新手,我是Java开发人员。按下鼠标时,是否会自动触发此单元格鼠标下降?如果是这样的话,我可以只更改背景图像,如您伟大的示例所示:)致以最诚挚的问候。yes by
cell.MouseDown+=cell\u MouseDown每个单元格将触发
单元格鼠标向下
事件。对于线,只需为每个cellOk设置一个边界笔刷。我正在为我的java游戏做一个地图编辑器。我使用WPF开发它只是为了学习。谢谢你的帮助。致以最良好的祝愿。@NavidRahmani我有一个问题,这个方法调用时没有任何异常,但我看不到网格???网格没有出现吗?
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
}