我有以下申请:
我正在开发一个Windows应用商店应用,我需要在其中显示一个充满按钮的大网格。按钮的内容是一些数字,当我点击其中任何一个时,我打开一个带编辑器的弹出窗口,在那里我编辑这些数字。为此我使用GridView,我将ItemsWrapGrid作为ItemsPanel。这使得网格看起来与我需要它看起来完全一样。我将GridView放在ScrollViewer中,因为我需要在两个方向上滚动网格,因为它有很多元素。此外,我需要具有ScrollViewer开箱即用的缩放效果。当用户在GridView旁边的ListView中选择不同的源时,我需要更改GridView的ItemsSource。
问题: 将GridView放在ScrollViewer中会破坏内部的虚拟化,这对我的性能有重大影响。当我切换GridView的ItemsSource时,渲染需要3-4秒以上,在此期间,UI被冻结。
我的问题: 我如何保留ScrollViewer为我提供的令人敬畏的东西并保持虚拟化?因为当我删除ScrollViewer时,几乎可以立即在ItemsSource之间进行更改。
有什么想法吗?
答案 0 :(得分:0)
您最好自己实施虚拟化,因为您尝试使用远离其设计用例的GridView
。
通过在视口内部和周围布置项目容器,将Canvas
放入ScrollViewer
进行平移和缩放,并处理ScrollViewer
上的视图更改事件。避免不必要的更改,因此如果要在视图更改事件和回收离开视口邻域的容器之间保持实现,请保持容器到位。