[.net] 별도의 어셈블리에서 ResourceDictionary

여러 개의 개별 응용 프로그램에서 사용하려는 리소스 사전 파일 (MenuTemplate.xaml, ButtonTemplate.xaml 등)이 있습니다. 응용 프로그램의 어셈블리에 추가 할 수 있지만 이러한 리소스를 하나의 단일 어셈블리로 컴파일하고 응용 프로그램에서 참조하는 것이 더 좋습니다.

리소스 어셈블리가 구축 된 후 응용 프로그램의 App.xaml에서 리소스 어셈블리를 어떻게 참조 할 수 있습니까? 현재 ResourceDictionary.MergedDictionaries를 사용하여 개별 사전 파일을 병합합니다. 어셈블리에 파일이 있으면 xaml에서 어떻게 참조 할 수 있습니까?



답변

팩 URI 구문을 확인하십시오 . 당신은 이와 같은 것을 원합니다 :

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


답변

예를 들어, 15 초만 대답하면

WPF 라이브러리에 “common”이라는 “styles.xaml”이 있고 기본 응용 프로그램 프로젝트에서 사용하려고한다고 가정합니다.

  1. 기본 프로젝트에서 “공통”프로젝트로 참조 추가
  2. app.xaml에는 다음이 포함되어야합니다.

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/Common;component/styles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

건배


답변

.NET 4.5로 작업하고 있는데도 작동하지 않습니다. WPF Custom Control Library를 사용하고있었습니다. 이것은 결국 나를 위해 일했습니다 …

<ResourceDictionary Source="/MyAssembly;component/mytheme.xaml" />

출처 : http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/11a42336-8d87-4656-91a3-275413d3cc19


답변

리소스 전용 DLL은 옵션입니다. 그러나 응용 프로그램을 다시 컴파일하지 않고 리소스를 수정하지 않는 한 반드시 필요한 것은 아닙니다. 하나의 공통 ResourceDictionary 파일도 있습니다. 리소스 등을 얼마나 자주 변경하는지에 따라 다릅니다.

<ResourceDictionary Source="pack://application:,,,/
     <MyAssembly>;component/<FolderStructureInAssembly>/<ResourceFile.xaml>"/>

MyAssembly- 확장명이없는 어셈블리 이름

FolderStructureInAssembly- 자원이 접힌 경우 폴더 구조를 지정하십시오.

이 작업을 수행 할 때 siteOfOrigin 도 알고있는 것이 좋습니다 .

WPF는 application : ///과 siteoforigin : ///의 두 가지 권한을 지원합니다. application : /// 기관은 리소스 및 컨텐츠 파일을 포함하여 컴파일시 알려진 애플리케이션 데이터 파일을 식별합니다. siteoforigin : /// authority는 site of origin 파일을 식별합니다. 각 권한의 범위는 다음 그림에 표시되어 있습니다.

여기에 이미지 설명을 입력하십시오


답변

UWP의 경우 :

<ResourceDictionary Source="ms-appx:///##Namespace.External.Assembly##/##FOLDER##/##FILE##.xaml" />


답변

XAML 사용 :

당신이 다른 알고있는 경우에 assembly구조를하고 싶은 resourcesC #을 코드, 다음 코드 아래 사용

 ResourceDictionary dictionary = new ResourceDictionary();
 dictionary.Source = new Uri("pack://application:,,,/WpfControlLibrary1;Component/RD1.xaml", UriKind.Absolute);
 foreach (var item in dictionary.Values)
 {
    //operations
 }

출력 :ResourceDictionary RD1.xaml 프로젝트 WpfControlLibrary1StackOverflowApp프로젝트 를 사용하려는 경우 .

프로젝트 구조 :

프로젝트 구조

자원 사전 :
자원 사전

코드 출력 :

산출

추신 : 모든 ResourceDictionary파일은 Build ActionResource‘또는 ‘ Page‘ 이어야합니다 .

C # 사용 :

누구나 순수 C # 코드 로 솔루션을 원한다면이 솔루션 을 참조하십시오 .


답변