Wpfアプリケーション内で修正できない本当に奇妙な問題があります。我々は多くの有用なコンポーネントを含む共通ライブラリを構築しました。そのうちの1つは、会社スタイルのMessageBoxです。 Globals.xamlへのメッセージボックスのためのフッターがありますリソースが存在する場合でもリソースが見つかりません
<ResourceDictionary Source="/Library;component/Style/Styles.xaml" />
<ResourceDictionary Source="/Library;component/Themes/Globals.xaml"/>
<ResourceDictionary Source="/Library;component/Themes/Controls/Button/Template.xaml"/>
、フッタはTemplate.xamlからテンプレートを使用しています。私たちは必要とほぼすべてが含まれている3つの辞書があります。 1つのケースでは完璧に動作しますが、動作しません。私はdinamicallyプラグインを作成し、ウィンドウを開くメインウィンドウがあります。このウィンドウは、リフレクションによってロードされる通常のWindow Wpfアプリケーションです。 MessageBoxを開く方法は、リソースディクショナリと同じDLL内にあります。
プラグインからこのMessageBoxメソッドを呼び出すと、「フッター」が見つからないため例外がスローされます。私は前にブレークポイントを設定しました
window.ShowDialog();
そしてMergedDictionariesがウィンドウに空であるのが分かります。また、どこでも空であり、このMessageBoxの所有者だけがそれらのリソースを含んでいます。 Doing
window.FindResource("key");
期待どおりのNULL値を取得します。私はスタイルを見ることができ、その後
foreach (var dict in owner.Resources.MergedDictionaries)
{
window.Resources.MergedDictionaries.Add(dict);
}
とwindow.FindResource(「キー」)を探し、それが例外をスロー続けていても:しかし、私は手動で開くダイアログの前に、このコード行を使用してマージされた辞書をコピーする場合:
'{Footer}'という名前のリソースが見つかりません。リソース名は大文字と小文字を区別します
フッターのスタイルは、メッセージボックスのこのラインで使用されています
<StatusBar Style="{StaticResource Footer}" DataContext="{Binding ElementName=window}"...
また、私はつもりそれを変更することが許可されていませんでした場合でも、ライブラリ内のダイアログウィンドウには、このリソースを宣言しようとしました:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Library;component/Themes/Generic.xaml" />
<ResourceDictionary Source="/Library;component/Themes/Globals.xaml"/>
<ResourceDictionary Source="/Library;component/Themes/Controls/Button/Template.xaml"/>
</ResourceDictionary.MergedDictionaries>
私はモニターで私の頭をノックし、何もなかった、私が試みたすべてが失敗しました。もちろん、モニターを壊したにもかかわらず。 アイデアがなくなります...
よろしくお願いします。
感謝を見つけた場合、XAML私はそれをやった。これのもっとも変わったことは、アプリケーションをデバッグして、そのリソースがロードされていないかどうかで "FindResource"メソッドでチェックできます。私が強制しても、それはMessageBoxで見つけることができません。 –
申し訳ありませんが、わかりません。 スタイルを参照するすべてのプロジェクトにライブラリ参照があります(リソースライブラリを参照していないプロジェクトの場合は、辞書をApp.xamlに入れても見つからない場合があります)。 リソースライブラリへの参照を追加するにはどうすればいいですか?プロジェクトオプションの意味ですか? –