我无法理解绘图组的问题。我正在 wpf 中创建一个地图编辑器,这是我的第一个 wpf 项目,我一直在搜索/玩绘图组。
我在左侧有一组图块,在应用程序启动时根据精灵文件夹填充这些图块。它们都根据我设置的规则进行布局(每行 3 组图块,每组 32 像素)。下面的例子:
private void RefreshTileList()
{
// For now load in all textures as possible tiles
DrawingGroup dGroup = new DrawingGroup();
Rect r = new Rect();
r.X = 0.0;
r.Y = 0.0;
r.Width = Settings.Default.TileThumbWidth;
r.Height = Settings.Default.TileThumbHeight;
foreach (WPFTexture tex in imgFind.TileTextures)
{
ImageDrawing iDraw = new ImageDrawing(tex.src, r);
dGroup.Children.Add(iDraw);
r.X += r.Width;
if (r.X > r.Width * Settings.Default.TileThumbMaxColumns)
{
r.X = 0.0;
r.Y += r.Height;
}
}
// Make a drawing image and send it to the Image in canvas
DrawingImage drawImage = new DrawingImage(dGroup);
tileImage.Source = drawImage;
}
现在我在另一个画布中进行图像控制,除了动态放置图块之外,我想做同样的事情。这是我到目前为止所拥有的:
private void AreaDrawingCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if(curSelIndex > -1 && curSelIndex < imgFind.TileTextures.Count)
{
BitmapSource tileSrc = imgFind.TileTextures[curSelIndex].src;
Point mousePos = e.GetPosition(sender as Canvas);
Size size = new Size(tileSrc.Width, tileSrc.Height);
Rect r = new Rect(mousePos, size);
ImageDrawing iDraw = new ImageDrawing(tileSrc, r);
areaDrawGroup.Children.Add(iDraw);
}
}
这是使用 areaDrawGroup 的初始化:
// Setup drawing for area
DrawingImage areaDrawImage = new DrawingImage(areaDrawGroup);
areaImage.Source = areaDrawImage;
areaImage.Stretch = Stretch.None;
AreaDrawingCanvas.Children.Add(areaImage);
如果我不添加位于绘图组中点 (0, 0) 的死图像,然后单击图像控件。它将偏移到一个奇怪的位置。当我继续单击左上角位置时,它会更正绘制瓷砖的位置,同时将所有其他瓷砖移过来。
我的问题是我在哪里可以找到一个好的平铺示例或者我做错了什么?因为添加一个死图像来修复其他图像所在的位置似乎对我错过的一些简单的东西来说是一个非常糟糕的黑客攻击。