使用DrawingContext时。DrawRectangle与TileBrush,我注意到矩形的左上角不是底层图像的左上角。源为DrawingImage的DrawingBrush和ImageBrush都会发生这种情况。有没有办法强制始终将底层画笔捕捉到左上角?这是一张图片: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));
}
* 在这种情况下,ImageBrush 会给出正确的结果,但在我的程序中,我正在处理带有自定义GeometryDrawing的 DrawingBrush 。
我试过用笔代替画笔,更改 TileMode,将拉伸设置为 Uniform,更改 AlignmentX 和 AlignmentY ......似乎没有任何效果。画笔的原点永远不会设置为矩形的原点。