私は現在、App.xaml内でリソースとしてインスタンス化するカスタムクラスを用意しています。これらのカスタムオブジェクトをMerged ResourceDictionaryに移動して、スタイル内で使用し、使用されている場所の近くに保持したいと考えています。 はここで任意に偽のコンバータオブジェクトを使用して、私が何をしたいの例ですが、彼らは任意のカスタムオブジェクト可能性があり...Silverlight 3 - Merged ResourceDictionary内にカスタムオブジェクトを作成する
App.xaml(名前空間宣言が省略さ):
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Merged.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style x:Key="SomeStyle" TargetType="SomeControl">
...
</Style>
...
</ResourceDictionary>
そして、その後、Merged.xaml(名前空間宣言は省略)で:
<ResourceDictionary>
<cvt:VisibilityToBoolConverter x:Key="BoolToVisibility" Inverted="True"/>
<cvt:VisibilityToBoolConverter x:Key="NotBoolToVisibility" Inverted="True" Not="True"/>
<Style x:Key="SomethingThatUsesVisibilityToBoolConvertersStyle" TargetType="SomeOtherControl">
....
</Style>
</ResourceDictionary>
私が見ている問題はこれです:私はBoolToVisibilityを作成していないときBoolToVisibilityオブジェクト(作成したカスタムクラスのインスタンスである他のオブジェクトをインスタンス化する)は、Application.Resourcesの一部と同じように作成され、すべての参照は期待通りに機能します。しかし、これらをMerged Resource Dictionary(上記のサンプルのとおり)に移動すると、Silverlightアプリケーションが読み込まれたときに不正なアプリケーション例外が発生します。
これは、オブジェクトがMerged Resource Dictionariesでどのように別々にインスタンス化されるかという問題であると私は考えていますが(それはレイジーロードのアプローチです)、それでも動作すると思います。
私は非常に多くのスタイルオブジェクト、DataTemplates、ControlTemplatesなどを追加することができます。しかし、Xamlを使用して名前を付けられたり、キーイングされたカスタムクラスのインスタンスを作成したい場合は、App.xamlのApplication.ResourcesとApplication.Resources/ResourceDictionaryの内部でうまく動作します。マージされた辞書に移動されるとすぐに、例外がスローされます。これは設計によるものですか?それ以外のアイデアはありますか?事前にありがとうございます...