0

テーマを動的に変更する必要がある新しいプロジェクトを作成しました。

App.xml を介してこれを行う場合、これに関する多くの投稿を見てきました。

例: Resources.MergedDictionaries.Clear();

Resources.MergedDictionaries.Add(new ResourceDictionary
  {
   Source = new Uri(Themes/MyTheme.xaml, UriKind.Relative)
  });

これはうまくいきますが、これは大規模なプロジェクトになり、各ビューを独自のプロジェクトに含める予定だったので (つまり、Prism 構造に従って)、各プロジェクトに独自のローカルテーマ .xaml を持たないようにしたかったのです。ファイルを作成し、これらを交換します (つまり、すべてをメイン アプリケーション (「シェル」) プロジェクトに含めるのではなく)。

私のサンプル プロジェクトは次の場所にあります。

https://dl.dropboxusercontent.com/u/30760237/ThemesSwap.zip

ここには、実行時にテーマを変更するヘルパーがあります (MainView2.ThemeHelper))

プロジェクトをそのまま実行すると、ボタンをクリックすると、古いテーマ (ピンクの背景) が削除されますが、新しいテーマ (黒い背景) は読み込まれません。

私がそれを機能させる唯一の方法は、次の「リンク」を App.xaml ファイルに追加することです (添付ファイルでコメントアウトされています)。

<ResourceDictionary.MergedDictionaries>
 <ResourceDictionary Source="/MainView2;component/Themes/DarkTheme.xaml"/>
</ResourceDictionary.MergedDictionaries>

私の質問は、これらのテーマをメイン プロジェクトにリンクする必要がなく、各ビュー プロジェクトに完全にカプセル化する方法はありますか? メイン プロジェクトでこれらを参照する必要がある理由がわかりません。

助けてくれてありがとう

よろしく、ピーター

4

1 に答える 1

0

誰かがこれに対する答えを私に言ったので、それを共有すると思います..

「参照アセンブリにコンパイルされるリソース ファイルのパック URI を使用する必要があります。」

つまり、「/MainView2;component」プレフィックスがあります...

ソース = 新しい Uri(="/MainView2;component/Themes/MyTheme.xaml, UriKind.Relative)

于 2013-08-14T00:36:33.917 に答える