我在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>
答案 0 :(得分:1)
不,StackPanel
不是Freezable
,但您提到GPU
无法在Animations
呈现60fps
,请尝试删除{{1} } fps
在主Windows构造函数中,您可以覆盖Animation
framerate
我通常使用30fps,因为它仍然很流畅,使用低端Animations
卡的用户将能够很好地运行你的应用程序。
示例:
GFX
试一试,看看是否有帮助