DrawingContextを使用する場合。TileBrushを使用したDrawRectangleで、長方形の左上が下にある画像の左上ではないことに気付きました。これは、DrawingBrushと、ソースをDrawingImageとして持つImageBrushの両方で発生します。下にあるブラシを常に左上隅にスナップするように強制する方法はありますか?これが写真です:DrawRectangle
2つの長方形は同じブラシを使用していますが、画面上の異なるポイントにあります。ご覧のとおり、ブラシの原点は異なります(ブラシははるかに広い領域で連続しているようです)。最小限の再現は次のとおりです。
private static readonly Brush _brush;
static CustomControl()
{
Uri uri = new Uri(@"pack://application:,,,/WpfApplication1;component/image.png", UriKind.Absolute);
BitmapImage img = new BitmapImage(uri);
Rect rect = new Rect(0, 0, img.Width, img.Height);
ImageDrawing drawing = new ImageDrawing(img, rect);
_brush = new DrawingBrush
{
Drawing = drawing,
Viewport = rect,
ViewportUnits = BrushMappingMode.Absolute,
TileMode = TileMode.Tile
};
_brush.Freeze();
}
protected override void OnRender(DrawingContext dc)
{
dc.DrawRectangle(_brush, null, new Rect(70, 70, 100, 150));
dc.DrawRectangle(_brush, null, new Rect(200, 200, 80, 120));
}
*この場合、ImageBrushで正しい結果が得られますが、私のプログラムでは、カスタムGeometryDrawingを使用してDrawingBrushを処理しています。
ブラシの代わりにペンを使用して、TileModeを変更し、ストレッチをUniformに設定し、AlignmentXとAlignmentYを変更してみました...何も機能しないようです。ブラシの原点が長方形の原点に設定されることはありません。