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個控件對象。提前致謝。
創建某種優化,當FrameworkElement的接收鼠標焦點,將它包裝在一個或的UIElement控制,那麼當它失去,回FrameworkElement的..? – 2011-12-15 18:22:59