首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Opacity=0时的DrawingVisual性能

使用Opacity=0时的DrawingVisual性能
EN

Stack Overflow用户
提问于 2008-11-12 17:59:54
回答 4查看 3.5K关注 0票数 4

如果我在带有Opacity=0的WPF中有一个DrawingVisual,这足以让它不被绘制吗?我们在画布上有成百上千的DrawingVisuals,目前正在对不显示的视觉效果设置Opacity=0,我想确保用Opacity=0渲染DrawingVisual不会影响渲染性能。

更新:通过测试,我发现当Opacity=0时会有开销,但由于DrawingVisual没有可见性属性,我不知道你还会如何告诉它不要显示,除非你真的将它从可视化树中删除,所以欢迎任何建议。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-10 18:07:58

最有效的方法似乎是在我的测试中设置不透明度。另一种简单的方法是重新绘制受影响的视觉效果。

代码语言:javascript
复制
using (DrawingContext dc = RenderOpen()) {} //Hide this visual

然后在它们再次可见时重新绘制。

渲染一个空白的绘图上下文似乎非常快。但如果你有复杂的视觉效果,当它们变得可见时,可能需要时间来重新渲染它们。

票数 1
EN

Stack Overflow用户

发布于 2009-04-04 03:56:21

我解决了一个非常类似的问题,方法是使用DrawingGroup并在DrawingGroup中添加或删除需要显示或隐藏的Drawing对象。关键是要以易于管理的方式组织Drawing对象,并了解如何在DrawingGroup中添加和删除这些对象。

请记住,您希望在由DrawingGroup.Children属性公开的DrawingCollection中添加和删除Drawing对象。所以使用DrawingGroup.Children.Add()或其他DrawingCollection方法:InsertRemoveRemoveAtClear。您需要保留向DrawingGroup添加/删除的Drawing对象的外部列表,才能成功完成此操作。

我在我的DrawingGroup实例中的第一个子实例中绘制了一个图像(位图),然后在这个DrawingGroup实例中添加和删除Drawing对象,以便在绘图的顶部分层多边形、路径、文本等,从而极大地发挥了这种技术的效果。

我通过向DrawingGroup的实例添加或删除Drawing对象来在图像上“绘制”或“擦除”。DrawingGroup被视为单个Drawing,因此任何缩放、平移或其他操作都将影响DrawingGroup中的所有Drawing对象。

票数 3
EN

Stack Overflow用户

发布于 2008-11-14 10:22:16

最好的检查方法是将Visibility设置为Visibility.Colapsed,并查看是否存在绘制性能差异。

Visibility.Colapsed确保元素不可见,但也确保它不会参与UI的排列、测量和渲染过程,而具有Opacity=0的元素可能参与所有过程。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/284766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档