代码之家  ›  专栏  ›  技术社区  ›  Bill Reiss

DrawingOpacity=0时的视觉性能

wpf
  •  3
  • Bill Reiss  · 技术社区  · 17 年前

    更新:我通过测试发现,当不透明度=0时会有开销,但由于DrawingVisual没有可见性属性,我不知道您如何告诉它不要显示,除非您实际将其从可视化树中删除,因此欢迎您提供任何建议。

    4 回复  |  直到 17 年前
        1
  •  3
  •   Glenn Slayden    8 年前

    我通过使用 DrawingGroup Drawing 来自 绘图组 因为它们要么需要显示,要么需要隐藏。关键是组织你的工作 绘画 对象,使其易于管理,并了解如何从中添加和删除它们 绘图组 .

    绘画 来自 DrawingCollection DrawingGroup.Children 所有物所以使用 DrawingGroup.Children.Add() 还是另一个 绘图集 方法: Insert , Remove , RemoveAt , Clear . 您需要保留一个 添加/删除到对象中的对象 绘图组

    在我的实例中,我通过在第一个子对象中绘制一个图像(位图)来使用这种技术,效果非常好 绘图组 然后添加和删除 绘画 对象的此实例 绘图组 以便在图形顶部对多边形、路径、文本等进行分层。

    我通过添加或删除在图像上“绘制”或“擦除” 绘画 对象的实例 绘图组 . 这个 绘图组 被视为单身 绘画 因此,任何缩放、平移或其他操作都会影响所有 中的对象 绘图组

        2
  •  2
  •   Pop Catalin    17 年前

    最好的检查方法是设置 Visibility 设置为Visibility.Colapsed,并查看是否存在任何图形性能差异。

        3
  •  1
  •   keft    14 年前

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

    using (DrawingContext dc = RenderOpen()) {} //Hide this visual
    

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

    呈现空白drawingcontext似乎非常快。但如果你有复杂的视觉效果,当它们变得可见时,可能需要时间重新播放它们。

        4
  •  0
  •   Theo Zographos Theo Zographos    17 年前

    为什么不干脆从可视子对象列表中删除该可视对象?当需要显示时,您可以将其添加回。