WPF中的Google Maps-Like滚动面板

时间:2008-09-25 17:09:22

标签: c# .net wpf

我有一个Canvas,我正在绘制一堆形状和其他UI元素。这个画布可能非常大,所以我想把它放在一个允许我使用鼠标放大/缩小的面板中,并通过拖动鼠标滚动,就像谷歌地图一样。我能找到的最接近的东西是ScrollViewer,但显然这还不够。

有没有人在WPF中完成此操作并拥有任何XAML和/或C#代码?

6 个答案:

答案 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 ScrollToHorizo​​ntalOffset()函数以编程方式移动滚动条。使用“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)

如果我在这里记得正确,你可以找到你想要的东西。

http://www.codeproject.com/KB/vista/swordfishcharts.aspx

答案 5 :(得分:0)

查看Sacha的this CodeProject文章......他有一个FrictionScrollViewer,通过拖动鼠标进行滚动(也支持一些物理......)