我无法理解绘图组的问题。我在wpf中创建了一个地图编辑器,这是我的第一个wpf项目,我一直在寻找/使用绘图组。如何在平铺图像时有效地使用DrawingGroup?
我有一组应用程序启动时填入基于关闭精灵的文件夹的左侧瓦片。它们都按照我设定的规则进行布局(每行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)死图像添加绘图组和我点击图像控件。它将抵消一个奇怪的位置。当我继续点击左上角的位置时,它会更正它在哪里绘制图块,同时将所有其他图块移动过来。
我的问题是我在哪里可以找到一个很好的例子平铺或我做了什么错?因为添加死图像来修复其他图像所在的位置似乎对我错过的一些简单操作来说非常糟糕。
我有一个类似的问题而回它原来是在画布上的'ClipToBounds'财产,我不能remeber如果我设置为true或false,但这并解决我的问题,尝试在你的'AreaDrawingCanvas设置此' –
对那个不利。我把它设置为true,不在滚动条下绘制内容(但我确实关闭了它)。 我试图从鼠标位置减去100,并在零零点击。黑客破裂。看起来在图像控制中,我根本不可能有任何小于0的孩子。即使当我用Canvas移动画布中的图像时,它也会出现毛刺,好像我无法做到。 – riekistyx