2011-06-30 12 views
2

私のプロジェクトには、というテンプレートがあります。、(コンパイル済みの)XAML ResourceDictionariesがあります。ResourceDictionaryを動的にロードする

UserControlでは、すべてのテンプレートをResourceDictionaryにロードします。私は、次のようなコードを使用します。私は書くために必要なもの

public MyView() 
{ 
    InitializeComponent(); 
    foreach (var resourceUri in new GetResourceUrisFromTemplatesFolder()) 
     Resources.MergedDictionaries.Add(
      new ResourceDictionary 
       { Source = new Uri(resourceUri, UriKind.Relative) }); 
} 

GetResourceUrisFromTemplatesFolder方法です。そのフォルダからすべてのリソースを検出する必要があります。

URIが/MyAssembly;component/MyNS/Templates/Template12345.xamlまたは../../Templates/Template12345.xaml

のような形をとることができ、これは可能ですか?

アセンブリのコンパイル済みリソース(MyAssembly.g.resources)から名前を手動で変換する必要がありますか。

答えて

1

名前をアセンブリのコンパイル済みリソース(MyAssembly.g.resources)から手動で変換する必要がありますか?ケースかもしれないと私は自分自身がそのよう、それは問題のそれほどではないでなければなりませんので、既にそれだけhas been answeredを行う方法についてしかし質問、それに近づくだろう

。ディクショナリのコンパイルアクションが一致することを確認してください。おそらく、名前にpack uriを付けることになります。

+0

うん、それは 'Source'で辞書をロードするとは異なるようでないことを –

5

ところで、それはそうように、1つは、手動でのResourceDictionaryを読み込むことができます。その後

ResourceDictionary dict = new ResourceDictionary(); 
System.Windows.Application.LoadComponent(dict, 
    new System.Uri("/SomeAssembly;component/SomeResourceDictionary.xaml", 
    System.UriKind.Relative)); 

を、http://msdn.microsoft.com/en-us/library/ms596995(v=vs.95).aspxで、それはなど

を持っているキーのプロパティでのforeachを使用して、その辞書オブジェクトに話すことができると言う

ロードされるXAMLファイルは、アプリケーション定義ファイル(App.xamlなど)>またはページファイル(たとえば、MainPage.xaml)のいずれかです。 XAMLファイルは、次のいずれかの場所にあります。

  • アプリケーションパッケージに含まれています。
  • アプリケーションアセンブリに組み込まれています。
  • 元のサイトのライブラリアセンブリに埋め込まれています。
+0

非常に簡単であることが判明しました。 「複雑な」部分は辞書を読み込まず、Urisを生成していました。 –

関連する問題