4

すべてのコンバーターを参照するリソースディクショナリを作成しているので、個々のコンバーターを参照する必要はありません。私のコンバーターは別のアセンブリにあり、それらをインポートするには、次のようにします。

  1. 外部アセンブリへの参照を追加
  2. リソースディクショナリを作成する
  3. Convertersアセンブリを参照するxml名前空間を追加します
  4. 参照コンバーター

だから私の辞書は次のようになります:

    <ResourceDictionary xmlns:Converters="clr-namespace:Client.Utilities.Converters;assembly=Client.Utilities">

    <Converters:BoolToBrushConverter x:Key="boolToBrush"/>

</ResourceDictionary>

ただし、ビルドしようとすると、次の例外が発生します。

Error   18  The tag 'BoolToBrushConverter' does not exist in XML namespace 'clr-namespace:Client.Utilities.Converters;assembly=.Client.Utilities'. Line 12 Position 6.  C:\Resources.Tests\Resources\ResourceDictionaries\Converters\ConvertersResources.xaml   12  6   Client.eZenith.Resources.Tests

なぜそれが起こっているのか考えはありますか?

注:インテリセンスから、すべてのコンバーターが入力後に候補リストに表示されるため、コンバーターアセンブリの名前空間は正しいようです。<Converter:

編集:VSとブレンドデザイナーはどちらも、コントロールプレビューをレンダリングするときにそのコンバーターを見つけることができます。

編集:私は、辞書がマージされることとは何の関係もないことを理解しました。Windowのリソースにコンバーターを追加するときにも同じ問題が発生します。

4

2 に答える 2

1

私は最終的に問題を発見しました、それは.NET4で導入されたマージされたresourcedictionaryバグです。

マージされたリソースディクショナリに空のスタイルを追加することで修正しました(以前は、他のRDだけをマージしていたRDがありました)。

これは私が最近見つけた同じ問題を説明するブログ投稿です。

于 2011-06-27T09:34:02.047 に答える
0

使ってみてください

<ResourceDictionary xmlns:Converters="clr-namespace:Client.Utilities.Converters;assembly=Client.Utilities">

代わりは。
変更:clr-namespaceの代わりにnamespace

于 2011-05-17T09:11:46.030 に答える