2009-10-30 3 views
7

ResourceDictionary(ビルドアクション=リソース)に保存されているXamlアセットを別のプロジェクトから参照できますか?私は、資産をメインプロジェクトのリソース辞書にマージするか、個々のリソースにアクセスしたいと思います。たとえば:Xamlのプロジェクト/ DLL間でのリソースへのアクセス

  • プロジェクト「MyResourcesでは、」「のButtonStyle」
  • プロジェクト「MainProject」参照のMyResourcesで呼ばれるスタイルが含まれている「MyAssets.xaml」と呼ばれるのResourceDictionaryを持っている「資産」という名前のフォルダが含まれています。それはおそらく、ことはできません場合は、

    <ResourceDictionary.MergedResources> 
        <ResourceDictionary Source="/MyResources/Assets/MyAssets.xaml"/> 
    </ResourceDictionary.MergedResources> 
    

    または::

    <Button Style="{StaticResource /MyResources/Assets/MyAssets.xaml}"/> 
    

    方法はありMainWindow.xamlに

  • はMainWindow.xamlで

私のような何かをしたいと思いますMainProjectからMyResourcesのものを参照するには?

答えて

13

ResourceDictionary in a separate assembly

<ResourceDictionary.MergedResources> 
    <ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/> 
</ResourceDictionary.MergedResources> 
+0

ありがとうございます、私の検索はそれを上げたはずです。これは詐欺です。 –

3

によると、あなたは、このメソッドを使用して、メイン辞書にあなたのプロジェクトからリソースをマージすることができます

/// <summary> 
/// Loads a resource dictionary from a URI and merges it into the application resources. 
/// </summary> 
/// <param name="resourceLocater">URI of resource dictionary</param> 
public static void MergeResourceDictionary(Uri resourceLocater) 
{ 
    if (Application.Current != null) 
    { 
     var dictionary = (ResourceDictionary) Application.LoadComponent(resourceLocater); 
     Application.Current.Resources.MergedDictionaries.Add(dictionary); 
    } 
} 

はこのようにそれを呼び出します。

MergeResourceDictionary(new Uri(@"/MyOtherAssembly;component/MyOtherResourceDictionary.xaml", UriKind.Relative));               
+0

コードベースの回答もお寄せいただきありがとうございます。 –

11
<ResourceDictionary Source="/Commons;component/Themes/TreeStyle.xaml" /> 
コンポーネントがある。

コモンズ

/Themes/TreeStyle.xamlはコモンズ

プロジェクト内のスタイルファイルの場所に対応した外部プロジェクトの名前です:

常に必要です

+1

パズルの各ピースを説明してくれてありがとう... +1 –

関連する問題