WPF中的Google Maps-like滚动面板
我有一个Canvas,在其中绘制了一堆形状和其他UI元素。该画布可能很大,因此我想将其放在一个面板中,这样我就可以使用鼠标进行放大/缩小,以及拖动鼠标进行滚动,就像Google Maps。我能找到的最接近的东西是ScrollViewer,但是显然这还不够接近。
有没有人在WPF中完成此操作并且拥有XAML和/或者Ccode?
解决方案
此链接对我们有帮助吗?我还没有进入WPF,但是快速搜索会产生此链接,并希望它可以:
http://blogs.vertigo.com/personal/swarren/Blog/Lists/Posts/Post.aspx?ID=7
如果我在这里没记错的话,我们会找到想要的东西。
http://www.codeproject.com/KB/vista/swordfishcharts.aspx
我们需要的是"虚拟画布面板",请在此处查看示例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
上周我问过DeepPoom是否计划用于WPF(因为它在Silverlight上可用)。我收到了指向此代码的链接,听起来像是我们所需的解决方案:在WPF中平移和缩放
我认为通过ScrollViewer使用大型画布/网格可以使我们走上正确的轨道。我最近使用相同的设置进行了类似的操作。
若要放大和缩小,可以在画布的LayoutTransform属性中使用ScaleTransform,然后将其挂接到MouseWheel事件。我们可以将ScaleX和ScaleY更改为"缩放",所有画布的子元素也将"缩放"。
为了进行平移,可以在ScrollViewer中隐藏滚动条,并使用MouseMove事件调用ScrollViewers ScrollToHorizontalOffset()函数以编程方式移动滚动条。使用"最佳解决方案"发布的链接,这就是正确的方法。
如果我在开发机器上,我可以给你一些示例代码。
看看Sacha的CodeProject文章...他有一个FrictionScrollViewer,可以通过拖动鼠标进行滚动(还支持某些物理原理...)