如果我在带有Opacity=0的WPF中有一个DrawingVisual,这足以让它不被绘制吗?我们在画布上有成百上千的DrawingVisuals,目前正在对不显示的视觉效果设置Opacity=0,我想确保用Opacity=0渲染DrawingVisual不会影响渲染性能。
更新:通过测试,我发现当Opacity=0时会有开销,但由于DrawingVisual没有可见性属性,我不知道你还会如何告诉它不要显示,除非你真的将它从可视化树中删除,所以欢迎任何建议。
发布于 2012-08-10 18:07:58
最有效的方法似乎是在我的测试中设置不透明度。另一种简单的方法是重新绘制受影响的视觉效果。
using (DrawingContext dc = RenderOpen()) {} //Hide this visual然后在它们再次可见时重新绘制。
渲染一个空白的绘图上下文似乎非常快。但如果你有复杂的视觉效果,当它们变得可见时,可能需要时间来重新渲染它们。
发布于 2009-04-04 03:56:21
我解决了一个非常类似的问题,方法是使用DrawingGroup并在DrawingGroup中添加或删除需要显示或隐藏的Drawing对象。关键是要以易于管理的方式组织Drawing对象,并了解如何在DrawingGroup中添加和删除这些对象。
请记住,您希望在由DrawingGroup.Children属性公开的DrawingCollection中添加和删除Drawing对象。所以使用DrawingGroup.Children.Add()或其他DrawingCollection方法:Insert、Remove、RemoveAt、Clear。您需要保留向DrawingGroup添加/删除的Drawing对象的外部列表,才能成功完成此操作。
我在我的DrawingGroup实例中的第一个子实例中绘制了一个图像(位图),然后在这个DrawingGroup实例中添加和删除Drawing对象,以便在绘图的顶部分层多边形、路径、文本等,从而极大地发挥了这种技术的效果。
我通过向DrawingGroup的实例添加或删除Drawing对象来在图像上“绘制”或“擦除”。DrawingGroup被视为单个Drawing,因此任何缩放、平移或其他操作都将影响DrawingGroup中的所有Drawing对象。
发布于 2008-11-14 10:22:16
最好的检查方法是将Visibility设置为Visibility.Colapsed,并查看是否存在绘制性能差异。
Visibility.Colapsed确保元素不可见,但也确保它不会参与UI的排列、测量和渲染过程,而具有Opacity=0的元素可能参与所有过程。
https://stackoverflow.com/questions/284766
复制相似问题