使用DrawingContext時。 DrawRectangle與TileBrush,我注意到矩形的左上角不是底層圖像的左上角。這發生在DrawingBrush和ImageBrush之間,源爲DrawingImage。有沒有辦法強制DrawRectangle
總是將基礎筆刷拍到左上角?這裏有一個畫面:WPF TileBrush和DrawingContext.DrawRectangle - 相對於矩形的左上角?
兩個矩形是否使用相同的畫筆,但在屏幕上的不同點。正如你所看到的,畫筆的起源是不同的(看起來畫筆在更大的區域上是連續的)。這裏有一個最小的攝製:
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));
}
*在這種情況下,圖像刷將給予正確的結果,但在我的節目,我負責的一個DrawingBrush使用自定義GeometryDrawing。
我試過用鋼筆代替畫筆,改變TileMode,將拉伸設置爲Uniform,改變AlignmentX和AlignmentY ...什麼都不起作用。畫筆的來源從未設置爲矩形的原點。
我試過設置Viewbox和Viewport,只是Viewbox和Viewport。每種情況下都會發生相同的行爲。問題不在於畫筆如何平鋪;這與它如何渲染有關。 –