DrawingContext.DrawRectangle чтобы нарисовать прямоугольник
Я пытаюсь нарисовать прямоугольник в изображение:
<Canvas>
<Image>
<Image.Source>
<DrawingImage>
<DrawingImage.Drawing>
<DrawingGroup x:Name="_drawingGroup" />
</DrawingImage.Drawing>
</DrawingImage>
</Image.Source>
</Image>
</Canvas>
Код C# выглядит так:
DrawingVisual visual = new DrawingVisual();
using (DrawingContext dc = visual.RenderOpen())
{
Rect rect = new Rect(new Point(100, 100), new Size(200, 100));
dc.DrawRectangle(Brushes.Blue, null, rect);
}
this._drawingGroup.Children.Add(visual.Drawing);
this._drawingGroup.Freeze();
Как видите, я намерен нарисовать прямоугольник с левым верхним углом (100,100). Но это не работает, как ожидалось - оно всегда рисует в (0,0). Что со мной не так?
1 ответ
Решение
DrawingImage выравнивает его Drawing
к видимому Bounds
рисунка.
В качестве обходного пути вы можете просто добавить прозрачный прямоугольник с началом координат в (0, 0). Также обратите внимание, что вам не нужен DrawingVisual для создания чертежа:
drawingGroup.Children.Add(new GeometryDrawing(
Brushes.Transparent, null,
new RectangleGeometry(new Rect(0, 0, 1, 1))));
drawingGroup.Children.Add(new GeometryDrawing(
Brushes.Blue, null,
new RectangleGeometry(new Rect(100, 100, 200, 100))));
drawingGroup.Freeze();
Альтернативой элементу управления Image с DrawingImage может быть (достаточно большой) прямоугольник с DrawingBrush:
<Rectangle Width="10000" Height="10000">
<Rectangle.Fill>
<DrawingBrush ViewboxUnits="Absolute" Viewbox="0,0,10000,10000">
<DrawingBrush.Drawing>
<DrawingGroup x:Name="drawingGroup" />
</DrawingBrush.Drawing>
</DrawingBrush>
</Rectangle.Fill>
</Rectangle>
Теперь вы можете создать свой рисунок, как задумано:
drawingGroup.Children.Add(new GeometryDrawing(
Brushes.Blue, null,
new RectangleGeometry(new Rect(100, 100, 200, 100))));
drawingGroup.Freeze();