DrawingContextを使用する場合。 DrawRectangleをTileBrushとすると、矩形の左上が下にある画像の左上ではないことに気付きました。これは、ソースがDrawingImageであるDrawingBrushとImageBrushの両方で発生します。 DrawRectangle
に、下にあるブラシを常に左上隅に合わせるように強制する方法はありますか?ここで絵です:WPF TileBrushとDrawingContext.DrawRectangle - 四角形の左上を基準にしていますか?
2つの矩形が同じブラシを使用しますが、画面上の異なる点であるされています。あなたが見ることができるように、ブラシの起源は異なっています(ブラシははるかに広い領域にわたって連続しているようです)。ここでは、最小限のREPROだ:で
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を変更しようとしましたが、何も動作しないようです。ブラシの原点は決して矩形の原点に設定されません。
ViewboxとViewport、Viewbox、そしてViewportだけを設定しようとしました。それぞれの場合で同じ動作が発生します。問題は、ブラシのタイリングの仕方ではありません。それはレンダリング方法と同じです。 –