我需要在屏幕上绘制一个网格,并且每次点击该用户都会在该特定区域上绘制图像。
我不知道如何绘制该网格。方块将具有固定的大小(32x32像素),但它们的数量将是可变的。我可以有一个NxN单元网格。此外,此网格需要位于滚动窗格中,因为其大小可变。 有谁知道如何绘制该网格并点击方块?
我正在使用WPF。
感谢。
答案 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中以获得滚动功能。