여러 개의 개별 응용 프로그램에서 사용하려는 리소스 사전 파일 (MenuTemplate.xaml, ButtonTemplate.xaml 등)이 있습니다. 응용 프로그램의 어셈블리에 추가 할 수 있지만 이러한 리소스를 하나의 단일 어셈블리로 컴파일하고 응용 프로그램에서 참조하는 것이 더 좋습니다.
리소스 어셈블리가 구축 된 후 응용 프로그램의 App.xaml에서 리소스 어셈블리를 어떻게 참조 할 수 있습니까? 현재 ResourceDictionary.MergedDictionaries를 사용하여 개별 사전 파일을 병합합니다. 어셈블리에 파일이 있으면 xaml에서 어떻게 참조 할 수 있습니까?
답변
팩 URI 구문을 확인하십시오 . 당신은 이와 같은 것을 원합니다 :
<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/>
답변
예를 들어, 15 초만 대답하면
WPF 라이브러리에 “common”이라는 “styles.xaml”이 있고 기본 응용 프로그램 프로젝트에서 사용하려고한다고 가정합니다.
- 기본 프로젝트에서 “공통”프로젝트로 참조 추가
- 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
구조를하고 싶은 resources
에 C #을 코드, 다음 코드 아래 사용
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
프로젝트 WpfControlLibrary1
에 StackOverflowApp
프로젝트 를 사용하려는 경우 .
프로젝트 구조 :
코드 출력 :
추신 : 모든 ResourceDictionary
파일은 Build Action
‘ Resource
‘또는 ‘ Page
‘ 이어야합니다 .
C # 사용 :
누구나 순수 C # 코드 로 솔루션을 원한다면이 솔루션 을 참조하십시오 .