我正在做一个应用程序,我使用PathFigure,LineSegment,...在FrameworkElement中存储为DrawingVisuals。
我需要在2个不同的UI元素(网格或面板,无论......)中显示相同的图形 一个将由用户用于绘制,第二个将允许可视化相同的绘图,缩放和滚动而不影响第一个UI元素视口。
我将拥有超过2000个DrawingVisuals,复制它们将是愚蠢的......
我目前正在摸索着找出最佳方法。 在您看来,什么是实现这一目标的正确解决方案?
更多信息:
我用一种简单的XAML
尝试了一种显而易见的方法<Grid>
<StackPanel>
<Border Name="B1" Background="Bisque" Width="400" Height="200"/>
<Border Name="B2" Background="Beige" Width="400" Height="200"/>
</StackPanel>
</Grid>
然后是一个简单的代码
var map = new VdMap();
B1.Child = map;
var elem = new ElementVisual(map);
elem.StartElement(20, 20);
elem.AddSegment(80, 60);
elem.AddSegment(10, 80);
elem.EndElement();
elem.Draw();
B2.Child = map;
VdMap是一个FrameworkElement
ElementVisual,StartElement,AddElement是我的内部函数。重要的是:
B1.Child = map; //I attach my Map to the border
B2.Child = map; //I try to attach the same FrameworkElement to the second border.
我得到运行时错误“指定元素已经是另一个元素的逻辑子元素。首先断开它。”
看起来好像比我想象的要难。
答案 0 :(得分:0)
确定,
我可能找到了正确的方法:VisualBrush和Rectangle。
var mapClone = new VisualBrush { Visual = map };
rectangle = new Rectangle {
Width = 300, Height = 300,
Stroke = Brushes.Black, HorizontalAlignment = HorizontalAlignment.Left,
Fill = mapClone };
B2.Children.Add(rectangle);
我现在在B2中有一张地图的可视化副本,我可以单独缩放和转换。
欢迎任何更好的主意。