Wpf 如何预渲染视图?
My ViewModel根据用户单击选择视图。其中一个视图包含许多可视元素—包含数据模板的viewmodels,其中包含数据模板的viewmodels,每个视图都使用背景图像笔刷在画布上渲染。整个视图以大约100个画布画笔结束,每个画笔上叠加了十几个椭圆,整个视图位于一个可滚动的viewbox中 第一次创建此视图时,用户单击会在所有视图渲染时挂起一段时间。我希望更早地完成此渲染-例如在启动期间。我已经创建了视图对象,但是当用户单击时,我们仍然会在渲染完成时挂起Wpf 如何预渲染视图?,wpf,xaml,Wpf,Xaml,My ViewModel根据用户单击选择视图。其中一个视图包含许多可视元素—包含数据模板的viewmodels,其中包含数据模板的viewmodels,每个视图都使用背景图像笔刷在画布上渲染。整个视图以大约100个画布画笔结束,每个画笔上叠加了十几个椭圆,整个视图位于一个可滚动的viewbox中 第一次创建此视图时,用户单击会在所有视图渲染时挂起一段时间。我希望更早地完成此渲染-例如在启动期间。我已经创建了视图对象,但是当用户单击时,我们仍然会在渲染完成时挂起 有没有办法让WPF/xaml对其进
有没有办法让WPF/xaml对其进行预渲染,从而使单击响应更好?正如我看到的,您正在使用MVVM模式。我会尝试以下方法: 在启动期间创建视图,并将其
DataContext
设置为viewmodel实例。然后模拟WPF执行的工作。在视图上调用Measure()
和Arrange()
方法,强制WPF更新数据绑定并生成可视化树
但是只有一个UI线程。因此,在这一点上,会再次阻塞启动例程。您可以通过将“工作”分成更小的部分来避免这种情况。也许视图模型中有一些项集合。然后,您可以使用DipatcherTimer
,在每个步骤中向集合添加一些合理数量的项,并在每次迭代后调用度量和排列,以更新视图的可视化树。
视图完全初始化后,渲染将不再阻塞。啊,是的,我明白了-感谢您的指导。为清楚起见,在
initializeComponent()
之后,我调用了this.Measure(新的System.Windows.Size(double.PositiveInfinity,double.PositiveInfinity))
和this.Arrange(new System.Windows.Rect(new System.Windows.Size(layoutRoot.ActualWidth,layoutRoot.ActualHeight))代码>在我视图的代码隐藏中。