1

リソース ディクショナリと、アプリケーションのスキンを変更するためのカスタム コンボボックスを格納する「テーマ エンジン」を作成しました。これは .dll ファイルにラップされており、新しいアプリケーションからこの .dll を参照して、スキン ロジックを準備できるようにすることを目的としています。私はこのプロジェクトの問題のほとんどを比較的簡単に解決しましたが、1 つの大きな問題が残っています... .dll を呼び出すアプリケーションでは、Background を使用して要素の背景などのプロパティを設定できます。 = "{DynamicResource XKeyOfBrushIWantToUse}" しかし、「リソース "XKeyOfBrushIWantToUse" を解決できませんでした。.dll がまだ読み込まれていないため、これは理にかなっています。アプリケーションを実行すると、このリソースを見つけて適切に使用できるようになりました。私が欲しいのは、ブラシの x:key プロパティがコンパイル時/設計時に何であるかを知る方法であり、プロパティを値に設定すると、どのオプションが利用可能かを知ることができます。

たとえば、私の .dll には、x:key="MainWindowBackgroundBrush" のブラシがあります。このブラシの色のプロパティは、色を含むリソースディクショナリが読み込まれることに基づいて変化します。(つまり、BlueColors.xaml には BackgroundColor をキーとする色があり、RedColors.xaml もそうです。実行時に色ファイルを交換でき、色の 16 進値は異なりますが、ブラシは引き続き「BackgroundColor」を指します)新しいアプリケーションに移動して .dll を参照し、たとえばボタンの背景色を設定します。.dll から使用可能なキーを公開する方法が見つからないため、ブラシのキーが何であるかを知る必要があります。

助けていただければ幸いです!!!!

4

1 に答える 1

2

DevExpressはこれを解決する興味深い方法を思いつきました。基本的に、Enums特定の要素とスタイルごとにのセットとMarkupExtension、この列挙型から値を受け取り、適切な文字列キーを返す があります。そうすれば、次のようなことができます。

<Style BasedOn="{StaticResource {dxgt:GridRowThemeKey ResourceKey=CellStyle}}"> 
  <!-- and so on... -->
于 2013-03-21T21:49:28.207 に答える