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