我需要在我的屏幕上绘制网格,并且每次点击用户在该特定区域绘制图像。用可点击的矩形绘制网格
我不知道如何绘制该网格。正方形将具有固定尺寸(32x32像素),但其数量可变。我可以有一个NxN单元网格。另外,这个网格需要放在一个滚动窗格中,因为它的大小是可变的。 有谁知道如何绘制该网格并获得点击方块?
我正在使用WPF。
谢谢。
我需要在我的屏幕上绘制网格,并且每次点击用户在该特定区域绘制图像。用可点击的矩形绘制网格
我不知道如何绘制该网格。正方形将具有固定尺寸(32x32像素),但其数量可变。我可以有一个NxN单元网格。另外,这个网格需要放在一个滚动窗格中,因为它的大小是可变的。 有谁知道如何绘制该网格并获得点击方块?
我正在使用WPF。
谢谢。
使用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
}
在我需要了解鼠标点击大多数情况下,我倾向于继承按钮。我觉得管理鼠标处理的基本事件有点令人讨厌,但这样做也会起作用,而且如果对您来说重要的话重量会更轻。无论哪种方式,如果您制作自定义或用户控件,您应该可以获得所需的一切。如果你想自己管理,你可以重写OnClick(如果你是子类Button)或OnPreviewMouseLeftButtonDown,OnPreviewMouseLeftButtonUp,OnMouseEnter和OnMouseLeave全部四个。仅捕获鼠标是不够的,因为您需要知道鼠标是否在您的控件中出现故障。我建议你观察按钮的标准点击行为来复制它,因为它有点复杂。
您可能希望查看UniformGrid以查看是否满足您的网格需求,因为您希望具有可变数量的列和行。您可以设置任意一个的数量,并且可以让孩子在他们之间流动。无论您在那里使用哪种控件,都可以放置在ScrollViewer中以获得滚动功能。
我明白了。谢谢你的时间。正如我看到它不打印线条,对吗?还有一个问题,正如你所看到的,我是C#的新手,我是一名Java开发人员。当鼠标被按下时,这个Cell_MouseDown会自动触发吗?如果是这样,我可以改变背景图像,如你的例子所示:)最好的问候。 – eestein
yes by'cell.MouseDown + = Cell_MouseDown;'每个单元格都会触发'Cell_MouseDown'事件。对于线条简单地设置边框刷到每个单元格 –
好的。我正在做的是我的java游戏的地图编辑器。我正在开发它使用WPF只是为了学习。谢谢你的帮助。最好的祝福。 – eestein