我有一个Canvas,我正在绘制一堆形状和其他UI元素。这个画布可能非常大,所以我想把它放在一个允许我使用鼠标放大/缩小的面板中,并通过拖动鼠标滚动,就像谷歌地图一样。我能找到的最接近的东西是ScrollViewer,但显然这还不够。
有没有人在WPF中完成此操作并拥有任何XAML和/或C#代码?
答案 0 :(得分:4)
我asked last week是否计划为WPF设计DeepZoom(因为它可以在Silverlight上使用)。我收到了这段代码的链接,听起来非常像您想要的解决方案:Pan and Zoom in WPF
答案 1 :(得分:2)
这个链接会有什么帮助吗?我没有进入WPF,但快速搜索产生了这个链接,希望它可以帮助你:
http://blogs.vertigo.com/personal/swarren/Blog/Lists/Posts/Post.aspx?ID=7
答案 2 :(得分:2)
我认为你在ScrollViewer上使用大型画布/网格是正确的。我最近使用相同的设置做了类似的事情。
对于放大和缩小,您可以在画布的LayoutTransform属性中使用ScaleTransform,然后将其连接到MouseWheel事件。您可以将ScaleX和ScaleY更改为“缩放”进出,并且所有画布的子元素也将“缩放”。
对于平移,您可以隐藏ScrollViewer中的滚动条,并使用MouseMove事件来调用ScrollViewers ScrollToHorizontalOffset()函数以编程方式移动滚动条。使用“Optimal Solutions”发布的链接,它正是如何做到的。
如果我在我的开发机器上,我可以给你一些示例代码。
答案 3 :(得分:1)
您需要的是“虚拟化画布面板”请在此处查看示例http://blogs.msdn.com/jgoldb/archive/2008/03/08/performant-virtualized-wpf-canvas.aspx
有关VirtualizingPanel http://blogs.msdn.com/dancre/archive/2006/02/06/526310.aspx
的更多信息答案 4 :(得分:0)
如果我在这里记得正确,你可以找到你想要的东西。
答案 5 :(得分:0)
查看Sacha的this CodeProject文章......他有一个FrictionScrollViewer,通过拖动鼠标进行滚动(也支持一些物理......)