WPF에서 리소스를 사용하기 위해 여러가지 방식이 있지만 그중 Pack URI를 사용하는 방법에 대하여 알아보자.
Pack URI는 리소스 및 컨텐츠 파일들을 식별하기 위해 사용하는 URI이다.
Pack URI scheme, authority
Pack URI의 스키마는 pack:// 을 사용하며
포맷은 다음과 같다.
pack://<authority><path>
아래 4가지 종류에 리소스로 접근하기 위해 authority 영역을 사용하여 지정한다.
- 로컬 어셈블리에 컴파일된 리소스 파일
- 참조된 어셈블리에 컴파일된 리소스 파일
- 참조한 어셈블리에 컴파일된 리소스 파일
- 컨텐츠 파일
- Site of origin 파일 (siteoforigin:///)
path는 참조 및 해당 프로젝트 루트를 기준으로 절대 또는 상대 경로를 적어서 사용하면 된다.
Pack URI는 총 2가지 authority를 지원한다. (application:/// and siteoforigin:///)
application:/// 는 컴파일 시점에 알려진 리소스 파일과 컨텐츠 파일을 포함하는 애플리케이션 데이터 파일 식별이 사용된다.
siteoforigin:/// 은 site of origin 파일의 식별에 사용된다. (이건 사용 쓰임을 모르겠음)
[중요] Pack URI는 표준 RFC2396를 따라야 하며 "/" 문자는 ","로 치환되어야 하며 "%" 및 "?" 같은 예약된 문자들(Reserved Characters)은 이스케이프될 필요가 있다.
(URL encode에 따르면 "%"는 %25로 표현되고 "/"는 %2F로 표현된다. encode에 의한 치환을 하는 것이 아니다.)
Pack URI 예제
> 로컬 어셈블리에 컴파일된 리소스 파일 Pack URI (예제)
[ 절대 Pack URI ]
pack://application:,,,/ResourceFile.xaml
pack://application:,,,/Subfolder/ResourceFile.xaml
applicaton:,,,/ResourceFile.xaml (로컬은 pack:// 생략이 가능하다)
[상대 Pack URI ]
/ResourceFile.xaml
/Subfolder/ResourceFile.xaml
> 참조된 어셈블리(프로젝트)에 컴파일된 리소스 파일 Pack URI (예제)
서식 표시 도움말: [] = 옵셔널, {} = 필수, component 참조 어셈블리인 경우 텍스트 필수 입력
서식: pack://{AssemblyShortName}[;Version][;PublicKey]{;component}/{path}
[ 절대 Pack URI ]
pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml
pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml
pack://application:,,,/ReferencedAssembly;v1.0.0.1;component/ResourceFile.xaml (참조된 버전 지정)
[ 상대 Pack URI ]
/ReferencedAssembly;component/ResourceFile.xaml
/ReferencedAssembly;component/Subfolder/ResourceFile.xaml
> xaml 컨텐츠 파일 Pack URI (예제)
xaml 파일은 리소스 파일과 같은 방식으로 컴파일 된다.
[ 절대 Pack URI ]
pack://application:,,,/ContentFile.xaml
pack://application:,,,/Subfolder/ContentFile.xaml
[상대 Pack URI ]
/ContentFile.xaml
/Subfolder/ContentFile.xaml
> Site Of Origin 파일 Pack URI (예제)
Site Of Origin 파일은 절대 Pack URI만 사용할 수 있다.
pack://siteoforigin:,,,/SiteOfOriginFile.xaml
pack://siteoforigin:,,,/Subfolder/SiteOfOriginFile.xaml
> 절대 및 상대 Pack URI
절대 Pack URI는 스키마(pack://), authority, path를 포함하고
상대 Pack URI는 path만 포함하여 작성한다.
> 간단한 절대 및 상대 Pack URI (예제)
pack://application,,,/ResourceFile.xaml (절대 Pack URI)
/ResourceFile.xaml (상대 Pack URI) (루트에 위치하는 리소스 파일)
ResourceFile.xaml (상대 Pack URI) (현재 폴더 내 리소스 파일)
C# 코드로 URI 작성 예제
기본적으로 Uri를 코드로 작성할 때 타입을 지정해주는 것이 좋다.
컴파일 타임이 아닌 어떤 상황에 의해 리소스가 런타임 타임에 의해 결정되는 경우 해당 URI의 타입은 RelavieOrAbsolute를 사용한다.
// Absolute URI (default)
Uri absoluteUri = new Uri("pack://application:,,,/File.xaml", UriKind.Absolute);
Uri absoluteUri = new Uri("pack://application:,,,/File.xaml");
// Relative URI
Uri relativeUri = new Uri("/File.xaml", UriKind.Relative);
Uri absoluteUri = new Uri("/File.xaml"); // 컴파일 에러!
참고: gongdosoft.com/57
'[====== Development ======] > C#' 카테고리의 다른 글
간편한 INI 파일 Handler (0) | 2021.10.26 |
---|---|
[WPF] Invert 가능한 BooleanToVisibilityConverter (0) | 2021.10.26 |
WPF Visibility 속성을 Radiobutton 의 IsChedched 속성과 바인딩하기 (0) | 2021.10.26 |
.Net Core Entity Framework Db First Sqlite (0) | 2021.10.24 |
PropertyChangedEvent (0) | 2021.10.20 |