2010-08-17 4 views
0

У меня есть DrawingGroup с вложенными детьми, созданными из SVG-файлов, и я хочу сделать это/преобразовать в соответствующий вложенный DrawingVisual/Visual.WPF: преобразование вложенной DrawingGroup в вложенный DrawingVisual

Простой процесс рендеринга, как следует ...

DrawingGroup group; // assuming root group of diagrams 
DrawingVisual visual = new DrawingVisual(); 

visual.DrawDrawing(group); 

... будет правильно визуализировать рисунок графика, но в результате визуального не содержит ребенка визуальный; создается только один визуальный объект без дочернего элемента.

Дети корня могут также иметь детей с трансформацией (-ами), что может быть причиной моей текущей неудачной попытки.

Мне нужен вложенный визуал для выполнения операций интерактивности. Кто-нибудь сделал что-то подобное и готов поделиться своим алгоритмом?

ответ

1

Я сделал почти то же самое:

Все мои дети получают из DrawingVisual. Это очень упрощено.

public class VisualParent : DrawingVisual 
{ 
    public List<VisualObject> mChildren = new List<VisualObject>(); 

    public VisualCollection mVisuals; 

    /// <summary> 
    /// Property AddVisual : Add visual child 
    /// </summary> 
    public void AddChild(VisualObject visual) 
    { 
     this.mChildren.Add(visual); 
    } 

    //Constructor 
    public VisualParent(Canvas canvas) 
    { 
     this.Canvas = canvas; 
     this.VisualParent = null; 

     mVisuals = new VisualCollection(canvas); 
    } 

    public override void Draw(DrawingContext canvas) 
    { 
     if (canvas == null) 
     { 
      throw new ArgumentNullException("drawingContext"); 
     } 

     canvas.DrawRectangle(new SolidColorBrush(BackgroundColor), new Pen(new SolidColorBrush(ForegroundColor), ActualLineWidth), Rectangle); 

     base.Draw(canvas); 

     if (IsSelected) 
     { 
      DrawHandles(canvas); 
     } 

     // Draw children 

     foreach (VisualObject obj in this.mChildren) 
     { 
      obj.Draw(canvas); 
     } 
    } 
} 

Поскольку drawingVisual не управляет детьми, вы должны сами рисовать всех детей.

Если вы хотите переместить или изменить размер объектов, вам необходимо выполнить ту же операцию с объектами.

+0

Jason Plank: приведенный выше код является неправильным и не компилируется. DrawingVisual - это легкий объект и не может использоваться таким образом в вашем коде. – Paulus

Смежные вопросы