【发布时间】:2008-09-25 17:09:22
【问题描述】:
我有一个画布,我正在其中绘制一堆形状和其他 UI 元素。这个画布可能非常大,所以我想把它放在一个面板中,允许我使用鼠标放大/缩小并通过拖动鼠标滚动,就像谷歌地图一样。我能找到的最接近的东西是 ScrollViewer,但显然这还不够接近。
有没有人在 WPF 中做过这个并且有任何 XAML 和/或 C# 代码?
【问题讨论】:
-
+1 这个问题 - 我也想看到这样的东西! =)
我有一个画布,我正在其中绘制一堆形状和其他 UI 元素。这个画布可能非常大,所以我想把它放在一个面板中,允许我使用鼠标放大/缩小并通过拖动鼠标滚动,就像谷歌地图一样。我能找到的最接近的东西是 ScrollViewer,但显然这还不够接近。
有没有人在 WPF 中做过这个并且有任何 XAML 和/或 C# 代码?
【问题讨论】:
我asked last week DeepZoom 是否计划用于 WPF(因为它在 Silverlight 上可用)。我收到了此代码的链接,这听起来很像您想要的解决方案:Pan and Zoom in WPF
【讨论】:
此链接有帮助吗?我还没有进入 WPF,但是快速搜索会产生这个链接,希望它可以帮助你:
http://blogs.vertigo.com/personal/swarren/Blog/Lists/Posts/Post.aspx?ID=7
【讨论】:
我认为您在使用带有 ScrollViewer 的大画布/网格方面走在了正确的轨道上。我最近使用相同的设置做了类似的事情。
对于放大和缩小,您可以在画布的 LayoutTransform 属性中使用 ScaleTransform,然后将其连接到 MouseWheel 事件。您可以将 ScaleX 和 ScaleY 更改为“放大”和缩小,画布的所有子元素也将“放大”。
对于平移,您可以在 ScrollViewer 中隐藏滚动条,并使用 MouseMove 事件调用 ScrollViewers ScrollToHorizontalOffset() 函数以编程方式移动滚动条。使用“最佳解决方案”发布的链接,正是这样做的。
如果我在我的开发机器上,我可以给你一些示例代码。
【讨论】:
您需要的是“虚拟化画布面板”,请在此处查看示例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
【讨论】:
如果我没记错的话,你可以在这里找到你想要的。
【讨论】:
查看 Sacha 的 thisCodeProject 文章...他有一个 FrictionScrollViewer,通过拖动鼠标进行滚动(还支持一些物理...)
【讨论】: