グループの描画に関する問題を理解するのに問題があります。私は最初のwpfプロジェクトであるwpfでマップエディターを作成しており、描画グループを検索/遊んでいます。
左側に一連のタイルがあり、アプリの起動時にスプライトのフォルダーに基づいて入力されます。それらはすべて、私が設定したルールに従ってレイアウトされます(各32ピクセルで1行あたり3セットのタイル)。以下の例:
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);
描画グループのpoint(0、0)にあるデッドイメージを追加せずに、イメージコントロールをクリックした場合。奇妙な場所にオフセットされます。左上の位置に向かってさらにクリックし続けると、他のすべてのタイルをシフトしながら、タイルを描画する場所が修正されます。
私の質問は、良いタイリングの例をどこで見つけることができるか、または何を間違えたのかということです。他の画像が配置されている場所を修正するためにデッドイメージを追加することは、私が見逃した単純なものへの本当に悪いハックのように見えるためです。