既定のリソースアセンブリのリソースにアクセスする必要があるWPF MarkupExtensionがあります。拡張機能は実行時に正常に機能しますが、拡張機能が起動時アセンブリのデフォルトリソースを見つけることができないため、設計者は失敗します。 ResourceManagerを読み込むには、リソースをロードするアセンブリを知る必要があります。WPFでデザイン時にスタートアップアセンブリを検索
実行時には、アセンブリを初期化で渡すことでこれを簡単に処理できます。これはうまく動作します。
しかし、デザインタイムでは、このスタートアップコードは実行されないので、デザイナーは爆弾を爆発させ、ページの読み込みに失敗します。だから、どのように私は(特定のアプリケーションの種類を参照せずに)一般的に、次のいずれかを取得することができます:
- アプリケーションの起動アセンブリ (すなわちWPF EXE。)
- 現在のXAMLドキュメントのマークアップ拡張機能が 上でホストされています
ああ、私は前にContextプロパティを見つけていましたが、プライベートリフレクションを使用して却下しました。しかし今では、このシナリオは主にデザイナーのためだと思うので、信頼の問題は問題ではありません。 これは私が正しい方向に向いていると思います。 –
上記のコードは、スタートアップアセンブリを使用しているデザイナで動作します。それでも他のアセンブリにはコントロールが残っていますが、それはかなりマイナーなマークアップ拡張のデフォルトが対応できます。 投稿のFWIW、私的反射コードは便利ですが、残念ながらデザイナーでは失敗します。結局のところ、デザイナーは部分的な信頼関係で動作し、私的な反射の試みは失敗します。コード を完全に中止するだけでなく、例外ブロックはそれをキャプチャしません。 –
奇妙な...私にとってデザイナーはクラッシュしません。とにかく、InputBindingコマンドをViewModelコマンドにバインドするのはちょっとした回避策です。 –