3

XAMLのマージン(および幅)を同じアプリケーションの他のマージンおよび同じ「スイート」のアプリケーションの他のアプリケーションのマージンと合わせようとすると、多くの「楽しみ」があります。

そこで、マージンをstaticresourcesとして定義するというアイデアを思いつきました。

<Thickness x:Key="MarginDetailTabPageContent">0</Thickness>
<Thickness x:Key="MarginLeftHeader">2,4,2,2</Thickness>
<Thickness x:Key="MarginAdditionalInfoOnTop">1,2,2,0</Thickness>
<Thickness x:Key="MarginSmallHeaderOnTop">1,2,2,0</Thickness>
<Thickness x:Key="MarginFieldWithAdditionalMarginOnTop">0,0,2,2</Thickness>
<System:Double x:Key="WidthSmallField">70</System:Double>

..そして、これらの静的リソースをどこでも使用する予定です..ラベル、テキストブロック、テキストボックス、チェックマーク付き..アプリケーションのほぼすべてのコントロールで。

しかし、このかなり時間のかかる変更を行う前に、これがパフォーマンスにどのように影響するかについて専門家の意見をお願いします。

どういうわけか、私の考えでは、どこでもstaticresourceを使用すると(<TextBlock Margin="{StaticResource=MarginLeftHeader}" ... />代わりに書き込み)、使用<TextBlock Margin="2,4,2,2" ... />する場所ごとに少なくとも何らかの関数を呼び出す必要があると判断しました。これでしょ?

全体的な質問は次のとおりです。ユーザーはパフォーマンスの変化を感じることができますか(悪い場合は..または良い場合)?

4

2 に答える 2

1

StaticResourceは、アプリケーションが実際に実行される前に発生するXAMLのロード中に解決され、プロパティに割り当てられます。一度だけ割り当てられ、リソースディクショナリへの変更は無視されます。したがって、パフォーマンスに大きな違いはありません。そのリソースのルックアップ動作は、コンパイル時のルックアップに類似しています。

于 2012-05-31T08:47:48.263 に答える
1

アプリにのインスタンスが複数<TextBlock Margin="2,4,2,2" ... />あると、それぞれに対して新しい個別のThicknessオブジェクトが作成されます。

単一のThicknessリソースと の複数のインスタンスを持つと、オブジェクトが<TextBlock Margin="{StaticResource MarginLeftHeader}" ... />1 つだけ作成され、複数の参照が作成されます。Thickness

いくつかの要因:

  • 2 番目のオプションは、最初のオプションよりも少ないメモリを使用します (つまりThickness、メモリ内のオブジェクトが少なくなります)。
  • 2 番目のオプションは、アプリケーションのマージンをグローバルに微調整したり、さまざまな状況でさまざまなマージンを提供したりする場合に、はるかに簡単になります。
  • Thickness新しいオブジェクトのインスタンス化とリソースの検索のどちらのオプションがより適切に機能するかはわかりません。私の直感では、単純なThickness構造体の場合、最初のオプションの方が実際にはパフォーマンスが向上する可能性があります (より複雑なクラスベースのオブジェクトの場合は異なる可能性があります)。

Thickness要約すると、 4 つの値のみの単純な構造体を扱っているためdouble、メモリとパフォーマンスの違いはおそらくほとんどないので、好きな方を実行してください。

于 2012-05-31T08:55:02.167 に答える