3

6つのカスタムユーザーコントロールを含むSilverlight3アプリケーションがあります。これらのコントロールの配色を外部リソースからロードしたいと思います。

デフォルトの配色を含むコードとXAMLは、XAPに組み込まれます。次に、オブジェクトタグのパラメータには、代替色を動的にロードできるURLが含まれます。

ちなみに、Silverlight 3アプリケーションのテーマ機能は、可能であれば使用できますが、実際にはやり過ぎです。色だけを変更する必要があります。

これは可能ですか?どのようにそれを行うことをお勧めしますか?

4

2 に答える 2

0

これが私がそれをする方法です。

App.xamlで、アプリケーションリソースディクショナリを次のように定義します。-

<Application.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="ColorTable.xaml" />
    </ReourceDictionary>
    <!-- rest of your application resource entries here -->
  </ResourceDictionary>
</Application.Resources>

ここで、ColorTable.xamlをXAPの外部、XAPが配置されているのと同じフォルダーに配置します。外部のColorTableが常に必要であるため、これはすべての基準を完全に満たすわけではありません。完全な要件を達成するためにこれをいくらか曲げることは可能ですが、比較するとかなり厄介になります。

于 2010-02-17T08:57:51.157 に答える
0

Corinna Barberが次の2つの記事で使用している手法を見てみましょう:http:
//blogs.msdn.com/corrinab/archive/2009/11/24/9927729.aspx
http://blogs.msdn.com/corrinab /archive/2009/12/02/9931283.aspx

基本的に、彼女が行うことは、アプリケーションの起動時に、バインディングヘルパークラス(彼女はSysColorsと呼ばれます)で一連のブラシ(ソリッドとグラデーションの両方)を作成することです。次に、彼女は次のように、これらのブラシにバインドするだけです。Background="{Binding CalendarGradient, Source={StaticResource SysColors}}"

彼女のアプローチの主な欠点は、グラデーションブラシを作成するときにかなりのコードを記述しなければならないことです。また、さまざまなグラデーションストップはすべて、データベース(またはxmlなど)に個別に保存する必要があります。おそらくブラシをxamlとして保存XamlReader.Loadし、ブラシオブジェクト全体を一度にロードするために使用できると思います。それは私にとってより良い計画のように聞こえますが、私はこれを試していません。私はただ大声で考えています。

あなたの状況では、アプリケーションの起動時に、デフォルトのスキームを簡単にロードしたり、WCFサービスなどからカラー値を取得したりできます。すべてのブラシにINotiyPropertyChangedを実装して、実行時にそれらを交換することもできます。しかし、それはあなたに悪いパフォーマンスを与えるかもしれないと思います。

于 2010-02-17T09:00:13.513 に答える