0

StackPanel横に並べたボックスやラインを簡単にレイアウトするためにWPFで使用していますが、使用するとアプリケーションのパフォーマンスが低下するようStackPanelです。

Microsoft のすべてのチュートリアルでは、一部のオブジェクトなどのフリーズについてのみ説明しているようですSolidColorBrushが、最初のレイアウト後に StackPanel をフリーズして、CPU が常にレイアウトする必要がないようにすることはできますか?

それとも、非常に高速Canvasなオブジェクトを使用して、その中のすべてのオブジェクトを 1 つずつレイアウトする必要がありますか?

例 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>
4

1 に答える 1

1

いいえ、そうでStackPanelはありませんがFreezable、でのGPUレンダリングAnimationsに問題があるとおっしゃいました。fps60fpsを下げてみてください。Animation

framerateメインの Windows コンストラクターでは、デフォルトをオーバーライドできますAnimations

私は通常 30fps を使用します。これはまだスムーズであり、ローエンドのGFXカードを使用しているユーザーがアプリケーションをよりスムーズに実行できるためです。

例:

    public MainWindow() 
    {
        InitializeComponent();

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

試してみて、役立つかどうかを確認してください

于 2013-03-08T22:04:00.553 に答える