У меня есть объект DrawingVisual, и я хочу изменить его заливку и обводку.
Я пробовал это для заполнения:
DrawingVisual MyDrawing = new DrawingVisual();
SetFill(Brushes.Red, MyDrawing.Drawing);
Где SetFill:
private void SetFill(Brush fill, DrawingGroup group)
{
foreach (Drawing drw in group.Children)
{
if (drw is DrawingGroup)
SetFill(fill, drw as DrawingGroup);
else if (drw is GeometryDrawing)
{
GeometryDrawing geo = drw as GeometryDrawing;
geo.Brush = fill;
using (DrawingContext context = MyDrawing.RenderOpen())
{
context.DrawDrawing(group);
}
}
}
}
Но таким образом может случиться так, что мой DrawingVisual отрисовывается в другую позицию, как если бы преобразования не применялись больше (к MyDrawing).
Также, если я меняю эту инструкцию: context.DrawDrawing(group);
на эту другую: context.DrawDrawing(MyDrawing.Drawing);
, я получаю странный эффект: если я меняю Заливку в первый раз ничего не происходит, а во второй Заливка меняется правильно без изменения положения фигуры.
Как я могу сделать?
GeometryDrawing.Brush
рекурсивно, без перерисовки? - person Clemens   schedule 09.05.2012SetFillEx
вы помещаете существующую группу рисования в коллекцию Children новой группы рисования. - person Clemens   schedule 09.05.2012