2012-04-13 13 views
0

同じプロジェクトに含まれているコンバータを使用するXAML UserControlがあります。異なるアセンブリからコンバータを参照するときのXamlParseException

xmlns:filter="clr-namespace:SampleModuleFilter" - namespace definition 

これまでのところとても良いです。しかし、コンバータを別のアセンブリに移動し、それに応じて名前空間と参照を調整すると、次の例外が発生します。 XamlParseException - "'System.Windows.Markup.StaticResourceHolder'の値を指定すると例外がスローされました。メソッドまたは操作が実装されていません「だけで奇妙である 別のライブラリに移動した後、名前空間は次のようになります。。

xmlns:filter="clr-namespace:SampleLibrary.Converters;assembly=SampleLibrary" 

コンバータのリソース定義は次のとおりです。

<filter:BoolToVisibilityConverter x:Key="boolToVisibilityConverter" /> 

と私はそれを使用しますように:

Visibility="{Binding DisplayLabel, Converter={StaticResource ResourceKey=boolToVisibilityConverter}}" 

IntelliSenseは、(名前空間接頭辞を書き込んだ後にコンバータクラスを提供する)okだから、明らかにライブラリを見ることができます。

問題の原因は何ですか?

+0

ビルドアクションは正しいですか? WPF関連のファイルをアセンブリ間で移動すると、ビルドアクションが変更されていました。 –

+0

はパブリッククラスのコンバーターですか? – Jaster

+0

はい、ビルドアクションはまだコンパイルされており、コンバーターはパブリッククラスです –

答えて

0

これは奇妙です。私たちのコンバータはすべて中央図書館にあり、うまく動作します。参照と名前空間が正しいと仮定すると、問題の2つのプロジェクトをきれいにして再構築することだけが私に示唆されます。

0

"SampleLibrary.dll"はコードのどこかで使用されていますか?

xamlファイルでのみ使用される参照されたアセンブリがコンパイル時にスキップされ、DLLの依存関係に現れない奇妙なバグがありました。

+0

提案してくれてありがとう、私はそれを試した、残念ながら助けていない –

1

コードビハインドファイルでもアセンブリを参照する必要があります。

アセンブリをXAML部分でのみ参照すると、コンパイラは "xxx.dllを読み込めませんでした"という例外を返します。

あなたはこのような何か作っ接続アセンブリに直接電話をかけることも必要があります。aで結果をかけることなく、コード

new MyExternalAssemby.MyType(); 

の新しいラインの

var dummy = new MyExternalAssemby.MyType(); 

か、単にこれをダミー変数。

通常、私は静的なコンストラクタでそれを行います。 これは、XAMLがコンパイルされずにBAML(バイナリXAML)で "翻訳"されただけなので、XAMLインタープリタのバグだと思います。したがって、NETリンカの背後にあるコードで "ハード"参照を作成せずにXAMLの型を参照すると、それはまったく無視されます。

HTH ロレンツォ

1

の代わりにちょうど:

xmlns:filter="clr-namespace:SampleModuleFilter" 

リファレンスアセンブリあまりにもトリックを行う必要があります

xmlns:filter="clr-namespace:SampleModuleFilter;assembly=SampleModuleFilterAssemblyName" 

関連する問題