2011-01-17 8 views
0

アプリケーションxamlには、さまざまなアイテムの状態を維持するためにアプリケーションで使用するクラスである4つのグローバルリソースがあります。ここでリソースディクショナリでマージすると、App.xamlでリソースを使用できませんか?

は、私はいくつかのものをクリーンアップし、いくつかのリソースディクショナリを作成するつもりだったことを決めた第23章を読んだ後、私たちは、app.xaml

<Application.Resources> 
    <AMSI:Global x:Key="AMSI.Global"/> 
    <eFin:Global x:Key="eFinancials.Global" /> 
    <eService:Global x:Key="eService.Global" /> 
    <eSite:Global x:Key="eSite.Global" /> 

    ... a bunch of styles and control templates here... 
</Application.Resources> 

でそれらを持っているかです。

私はblendを使用して2つのリソース辞書を作成し、すべてのスタイルをそれらに移動しました。私のxamlを次のように変更しました。

<Application.Resources> 
    <ResourceDictionary> 
     <AMSI:Global x:Key="AMSI.Global"/> 
     <eFin:Global x:Key="eFinancials.Global" /> 
     <eService:Global x:Key="eService.Global" /> 
     <eSite:Global x:Key="eSite.Global" /> 

     <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="Resources/ControlStyles.xaml"/> 
     <ResourceDictionary Source="Resources/DefaultColors.xaml"/>  
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

Ok ...素晴らしいです。私は幸せでした。私は、アプリケーションを実行しようとするまで、初期化エラーが発生しました。どうやら我々がこのコードを持っている以上のグローバルオブジェクトの1のコンストラクタで起こりません:

var amsiGlobal = Application.Current.Resources["AMSI.Global"] as AMSI.Global; 
amsiGlobal.PropertyChanged += new 
    System.ComponentModel.PropertyChangedEventHandler(amsiGlobal_PropertyChanged); 

それはもはやAMSI.Globalオブジェクトへの参照を得ていた...しかし、それは前に正常に動作していました動く

私は間違っています。これらのグローバルオブジェクトを外部に移動したり、リソース辞書を使用してコードを再実行したりすると、xamlにエラーがあり、ブレンドして新しいコントロールテンプレートを作成しようとすると辞書が見つかりません。また、コントロールテンプレートを作成する場合、コントロールを参照するコントロールと同じページにあっても、コントロールテンプレートは見つからないようです。だから、私は実行時に問題があると思います。

ここで何が起こっているのですか?すべてのスタイルとテンプレートをapp.xamlに戻すだけでいいですか?

答えて

1

私は、Silverlightで少し新しいんだけど、あなたがマージされた辞書に

<AMSI:Global x:Key="AMSI.Global"/> 
    <eFin:Global x:Key="eFinancials.Global" /> 
    <eService:Global x:Key="eService.Global" /> 
    <eSite:Global x:Key="eSite.Global" /> 

を追加しようとしていますか? それは私が正常にちょうど

よろしく

をマージdictionaiesで私のリソースを追加し、問題があったことがないこの

<Application.Resources> 

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary> 
     <AMSI:Global x:Key="AMSI.Global"/> 
     <eFin:Global x:Key="eFinancials.Global" /> 
     <eService:Global x:Key="eService.Global" /> 
     <eSite:Global x:Key="eSite.Global" /> 
    </ResourceDictionary> 
    <ResourceDictionary Source="Resources/ControlStyles.xaml"/> 
    <ResourceDictionary Source="Resources/DefaultColors.xaml"/>  
    </ResourceDictionary.MergedDictionaries> 

のようになります。

関連する問題