WPF StackPanel是否可以冻结

时间:2013-03-08 20:34:28

标签: wpf performance stackpanel

我在WPF中使用StackPanel只是为了方便地布局水平对齐的方框和线条,但使用StackPanel时应用程序的性能似乎变慢了。

所有的Microsoft教程似乎只讨论冻结一些SolidColorBrush等对象,但是在第一次布局后StackPanel可以冻结,所以CPU不必一直布局它,只需要一次吗?

或者我只是被迫使用非常快的Canvas对象并逐个布局其中的所有对象?

示例1:设计人员很容易布局,但缺乏性能:

    <StackPanel Height="35" Canvas.Left="49" Canvas.Top="874" Width="395" Orientation="Horizontal">
        <TextBox Text="test" Width="65"/>
        <Rectangle Stroke="Black" Width="1" />
        <TextBox Text="test" Width="55"/>
        <Rectangle Stroke="Black" Width="1" />
        <TextBox Text="test" Width="75"/>
        <Rectangle Stroke="Black" Width="1" />
        <TextBox Text="test" Width="35"/>
        <Rectangle Stroke="Black" Width="1" />
        <TextBox Text="test" Width="95"/>
        <Rectangle Stroke="Black" Width="1" />
        <TextBox Text="test" Width="65"/>
        <Rectangle Stroke="Black" Width="1" />
    </StackPanel>

示例2:良好的性能,在设计师中进行布局是一件痛苦的事:

    <Canvas Height="35"  Canvas.Left="49" Canvas.Top="914" Width="395">
        <TextBox Text="test" Width="65" Height="35"/>
        <Rectangle Stroke="Black" Width="1" Height="35" Canvas.Left="65"/>
        <TextBox Text="test" Width="55" Canvas.Left="66" Height="35"/>
        <Rectangle Stroke="Black" Width="1" Height="35" Canvas.Left="195"/>
        <TextBox Text="test" Width="75" Height="35" Canvas.Left="122"/>
        <Rectangle Stroke="Black" Width="1" Height="35" Canvas.Left="121"/>
        <TextBox Text="test" Width="35" Height="35" Canvas.Left="198"/>
        <Rectangle Stroke="Black" Width="1" Height="35" Canvas.Left="197"/>
        <TextBox Text="test" Width="95" Height="35" Canvas.Left="234"/>
        <Rectangle Stroke="Black" Width="1" Height="35" Canvas.Left="329"/>
        <TextBox Text="test" Width="65" Height="35" Canvas.Left="330"/>
        <Rectangle Stroke="Black" Width="1" Height="35" Canvas.Left="233"/>         
    </Canvas>

1 个答案:

答案 0 :(得分:1)

不,StackPanel不是Freezable,但您提到GPU无法在Animations呈现60fps,请尝试删除{{1} } fps

在主Windows构造函数中,您可以覆盖Animation

的defualt framerate

我通常使用30fps,因为它仍然很流畅,使用低端Animations卡的用户将能够很好地运行你的应用程序。

示例:

GFX

试一试,看看是否有帮助