2011-12-15 56 views
0

圖形對象的編輯有是設計用圖來工作圖形WPF編輯器。因爲圖表可以包含非常多的對象,所以選擇使用圖形進行輸出。這意味着,我們創造了一些業務對象的列表視覺在WPF

class BusinessObject 
{ 
    // bunch of other properties and methods 
    public GeometryDrawing MyDrawing {get;set;} 
} 

它傳遞給幫手,對每個圖形創建DrawingVisual:

public List<Visual> BuildVisuals(List<BusinessObject> objectsList) 
{ 
    // foreach item in objectsList takes item.MyDrawing and draws it with DrawingContext 
} 

,然後注入接收到的數據繪製主機

public class VisualHost : FrameworkElement 
{ 
    // FrameworkElement overrides, skipped 

    public readonly VisualCollection _children;  

    public VisualHost(List<Visual> visualsList) 
    { 
    _children = new VisualCollection(this); 
    foreach(var visual in visualsList) 
    { 
     _children.Add(visual); 
    } 
    // mouse handlers, other logic (skipped) 
    } 
} 

一切工作正常,並且很快(甚至是VisualHitTesting,通過向後映射到各個業務對象,雙向數據即時更改),但現在需要允許可視化對象的編輯 - 移動周圍的工作空間,改變大小,縮放比例等WPF大拇指和裝飾器進入腦海(http://www.codeproject.com/KB/WPF/WPFDiagramDesigner_Part1.aspx),但他們是爲了工作與UIElement/Controls,我們的視覺不是。有沒有人看到一種方法來解決這個問題沒有太多的初始邏輯的變化?可能有一些解決方法或類似的功能。重寫上述代碼不是一個選項,如果我們在圖上使用它們,我們不能在內存中擁有超過1000個控件對象。提前致謝。

+0

創建某種優化,當FrameworkElement的接收鼠標焦點,將它包裝在一個或的UIElement控制,那麼當它失去,回FrameworkElement的..? – 2011-12-15 18:22:59

回答

0

問題是手動解決 - 調整大小和旋轉裝飾器被繪製爲在現有的獨立的對象,並添加/從集合/失去焦點畫布除去。