2013-03-08 80 views
0

我在WPF中使用StackPanel只是爲了方便佈局水平對齊的框和線,但似乎應用程序的性能變慢,使用StackPanel時。是WPF的StackPanel凍結

所有的微軟教程似乎只是談論凍結一些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

發表您的XAML。另外,如果你有大量的滾動列表,你最好使用'VirtualizingStackPanel'來代替。 – 2013-03-08 20:36:33

+0

沒有爲此計劃滾動 - 只是放置〜15個文本框和1個像素寬的黑色矩形並排。所有這些封裝在UserControl內部,然後在一個窗體中大約5-10個這些UserControls。 – Jaska 2013-03-08 20:58:54

+1

1 - 發佈您的XAML。 2 - 請不要將WPF'Window'稱爲「表單」。這是對我的信仰和價值的侮辱。 – 2013-03-08 20:59:47

回答

1

沒有,StackPanel是不是Freezable,但是您提到您的GPU在渲染Animations60fps時遇到問題,請嘗試刪除Animation fps

在您Windows主構造器可以覆蓋defualt framerateAnimations

我usally使用30fps的,因爲它仍然是平穩和用戶提供低端GFX卡將能夠運行你的應用程序有很多smotther。

例子:

public MainWindow() 
    { 
     InitializeComponent(); 

     Timeline.DesiredFrameRateProperty.OverrideMetadata(typeof(Timeline) 
      , new FrameworkPropertyMetadata { DefaultValue = 30 }); // 30 = 30fps 
    } 

試一試,看看它是否有助於

+0

@HighCore已經指引我走向正確的方向 - 我應該使用rendertransformations來移動和縮放物體,而不是邊緣和寬度以及高度和物體。我會嘗試這些。 – Jaska 2013-03-08 22:06:27