10

我已经处理过 LayoutTransform 和 RenderTransform 并且我知道每个都适合我在以前的项目中发现的特定场景。

然而,从性能的角度来看,在使用 WPF 分析工具时,例如,哪个对 UI 性能的影响较小?

4

2 回答 2

14

由 MSDN 指定:

要将转换应用于 FrameworkElement,请创建一个 Transform 并将其应用于 FrameworkElement 类提供的两个属性之一: LayoutTransform – 在布局传递之前应用的转换。应用变换后,布局系统会处理元素变换后的大小和位置。RenderTransform – 修改元素外观但在布局传递完成后应用的变换。通过使用 RenderTransform 属性而不是 LayoutTransform 属性,您可以获得性能优势。你应该使用哪个属性?由于它提供的性能优势,请尽可能使用 RenderTransform 属性,尤其是在使用动画变换对象时。在缩放、旋转或倾斜时使用 LayoutTransform 属性,并且您需要元素的父级来调整元素的变换大小。请注意,当它们与 LayoutTransform 属性一起使用时,TranslateTransform 对象似乎对元素没有影响。这是因为布局系统将翻译后的元素返回到其原始位置作为其处理的一部分。

并且:

如果在不需要布局系统完全通过的场景中调用 LayoutTransform,可能会导致应用程序性能下降。当您将 LayoutTransform 应用于 Panel 的 Children 集合时,它会触发布局系统的新通道并强制重新测量和重新排列所有屏幕上的对象。如果您要更新完整的应用程序用户界面 (UI),那么此功能可能正是您所需要的。但是,如果您不需要完整的布局传递,请使用 RenderTransform 属性,该属性不会调用布局系统,因此对于这种情况通常是更好的选择。

于 2012-04-26T07:59:11.407 回答
14

为了补充 gliderkite 的答案,RenderTransforms 也将在 GPU 有能力时由 GPU 处理,而 LayoutTransforms 在 CPU 上完成。

于 2012-04-26T08:01:44.670 回答