WPF におけるパッケージの URIPack URIs in WPF

Windows Presentation Foundation (WPF) では、Uniform Resource Identifier (URI) は、次のようなさまざまな用途でファイルを識別し、読み込むために使用されます。In Windows Presentation Foundation (WPF), uniform resource identifiers (URIs) are used to identify and load files in many ways, including the following:

  • アプリケーションが初めて起動するときに表示する ユーザー インターフェイス (UI)user interface (UI) の指定。Specifying the ユーザー インターフェイス (UI)user interface (UI) to show when an application first starts.

  • イメージの読み込み。Loading images.

  • ページへの移動。Navigating to pages.

  • 実行可能でないデータ ファイルの読み込み。Loading non-executable data files.

さらに、URI は、次のようなさまざまな場所からファイルを識別し、読み込むために使用できます。Furthermore, URIs can be used to identify and load files from a variety of locations, including the following:

  • 現在のアセンブリ。The current assembly.

  • 参照アセンブリ。A referenced assembly.

  • アセンブリに対して相対的な位置。A location relative to an assembly.

  • アプリケーションの起点サイト。The application's site of origin.

これらの位置からこれらの種類のファイルを識別し、読み込むための一貫性のあるメカニズムを提供するために、WPF では "パック URI スキーム" の拡張性が利用されます。To provide a consistent mechanism for identifying and loading these types of files from these locations, WPF leverages the extensibility of the pack URI scheme. このトピックでは、このスキームの概要を説明し、さまざまなシナリオに応じたパック URI を構築する方法を述べ、絶対および相対 URI と URI の解決について説明した後、マークアップとコードの両方からパック URI を使用する方法を示します。This topic provides an overview of the scheme, covers how to construct pack URIs for a variety of scenarios, discusses absolute and relative URIs and URI resolution, before showing how to use pack URIs from both markup and code.

パック URI スキームThe Pack URI Scheme

パック URI スキームは、Open Packaging Conventions (OPC) 仕様によって使用されます。この仕様は、コンテンツを編成し、識別するためのモデルを規定しています。The pack URI scheme is used by the Open Packaging Conventions (OPC) specification, which describes a model for organizing and identifying content. このモデルの主な要素は、パッケージとパーツであり、"パッケージ" は、1 つ以上の論理 "パーツ" の論理的なコンテナーです。The key elements of this model are packages and parts, where a package is a logical container for one or more logical parts. この概念を次の図に示します。The following figure illustrates this concept.

パッケージとパーツのダイアグラム

パーツを識別するために、OPC 仕様では、RFC 2396 (Uniform Resource Identifier (URI): 一般構文) の拡張性を利用して、パック URI スキームが定義されます。To identify parts, the OPC specification leverages the extensibility of RFC 2396 (Uniform Resource Identifiers (URI): Generic Syntax) to define the pack URI scheme.

URI によって指定されるスキームは、そのプレフィックスによって定義されます。http、ftp、および file は、よく知られている例です。The scheme that is specified by a URI is defined by its prefix; http, ftp, and file are well-known examples. パック URI スキームでは、スキームとして "pack" が使用され、オーソリティとパスの 2 つのコンポーネントが含まれます。The pack URI scheme uses "pack" as its scheme, and contains two components: authority and path. パック URI の形式は、次のとおりです。The following is the format for a pack URI.

pack://authority/pathpack://authority/path

authority は、パーツが含まれるパッケージの種類を指定し、path は、パッケージ内のパーツの位置を指定します。The authority specifies the type of package that a part is contained by, while the path specifies the location of a part within a package.

この概念を次の図に示します。This concept is illustrated by the following figure:

パッケージ、権限、およびパスの間のリレーションシップ

パッケージとパーツは、アプリケーションとファイルに似ています。つまり、アプリケーション (パッケージ) は、次のような 1 つ以上のファイル (パーツ) を含むことができます。Packages and parts are analogous to applications and files, where an application (package) can include one or more files (parts), including:

  • ローカル アセンブリにコンパイルされるリソース ファイル。Resource files that are compiled into the local assembly.

  • 参照センブリにコンパイルされるリソース ファイル。Resource files that are compiled into a referenced assembly.

  • 参照元センブリにコンパイルされるリソース ファイル。Resource files that are compiled into a referencing assembly.

  • コンテンツ ファイル。Content files.

  • 起点サイト ファイル。Site of origin files.

これらの種類のファイルにアクセスするために、WPF では、application:/// と siteoforigin:/// という 2 つのオーソリティがサポートされます。To access these types of files, WPF supports two authorities: application:/// and siteoforigin:///. application:/// オーソリティは、リソース ファイルやコンテンツ ファイルなど、コンパイル時に既知のアプリケーション データ ファイルを識別します。The application:/// authority identifies application data files that are known at compile time, including resource and content files. siteoforigin:/// オーソリティは、起点サイト ファイルを識別します。The siteoforigin:/// authority identifies site of origin files. 各オーソリティのスコープを次の図に示します。The scope of each authority is shown in the following figure.

Pack URI のダイアグラム

注意

パック URI のオーソリティ コンポーネントは、パッケージを指す埋め込み URI であり、RFC 2396 に準拠する必要があります。The authority component of a pack URI is an embedded URI that points to a package and must conform to RFC 2396. さらに、"/" 文字は "," 文字に置き換える必要があり、"%" や "?" などの予約文字はエスケープする必要があります。Additionally, the "/" character must be replaced with the "," character, and reserved characters such as "%" and "?" must be escaped. 詳細については、OPC を参照してください。See the OPC for details.

以下のセクションでは、この 2 つのオーソリティと、リソース ファイル、コンテンツ ファイル、および起点サイト ファイルを識別する適切なパスとを組み合わせてパック URI を構築する方法について説明します。The following sections explain how to construct pack URIs using these two authorities in conjunction with the appropriate paths for identifying resource, content, and site of origin files.

リソース ファイルのパック URIResource File Pack URIs

リソース ファイルは、MSBuild のResource 項目として構成され、アセンブリにコンパイルされます。Resource files are configured as MSBuild Resource items and are compiled into assemblies. WPF では、ローカル アセンブリにコンパイルされるか、ローカル アセンブリから参照されるアセンブリにコンパイルされるリソース ファイルを識別するために使用できるパック URI の構築がサポートされています。WPF supports the construction of pack URIs that can be used to identify resource files that are either compiled into the local assembly or compiled into an assembly that is referenced from the local assembly.

ローカル アセンブリ リソース ファイルLocal Assembly Resource File

ローカル アセンブリにコンパイルされるリソース ファイルのパック URI では、次のオーソリティとパスを使用します。The pack URI for a resource file that is compiled into the local assembly uses the following authority and path:

  • オーソリティ: application:///。Authority: application:///.

  • パス:ローカル アセンブリのプロジェクト フォルダーのルートに対して相対的なパスを含むリソース ファイルの名前。Path: The name of the resource file, including its path, relative to the local assembly project folder root.

次の例では、ローカル アセンブリのプロジェクト フォルダーのルートにある XAMLXAML リソース ファイルのパック URI を示します。The following example shows the pack URI for a XAMLXAML resource file that is located in the root of the local assembly's project folder.

pack://application:,,,/ResourceFile.xaml

次の例では、ローカル アセンブリのプロジェクト フォルダーのサブフォルダーにある XAMLXAML リソース ファイルのパック URI を示します。The following example shows the pack URI for a XAMLXAML resource file that is located in a subfolder of the local assembly's project folder.

pack://application:,,,/Subfolder/ResourceFile.xaml

参照アセンブリ リソース ファイルReferenced Assembly Resource File

参照アセンブリにコンパイルされるリソース ファイルのパック URI では、次のオーソリティとパスを使用します。The pack URI for a resource file that is compiled into a referenced assembly uses the following authority and path:

  • オーソリティ: application:///。Authority: application:///.

  • パス:参照アセンブリにコンパイルされるリソース ファイルの名前。Path: The name of a resource file that is compiled into a referenced assembly. パスは、次の書式に従う必要があります。The path must conform to the following format:

    AssemblyShortName{ ;Version]{ ;PublicKey];component/PathAssemblyShortName{;Version]{;PublicKey];component/Path

    • AssemblyShortName: 参照アセンブリの短い名前。AssemblyShortName: the short name for the referenced assembly.

    • ;Version (省略可能): リソース ファイルを含む参照アセンブリのバージョン。;Version [optional]: the version of the referenced assembly that contains the resource file. これは、同じ短い名前を持つ 2 つ以上の参照アセンブリが読み込まれるときに使用されます。This is used when two or more referenced assemblies with the same short name are loaded.

    • ;PublicKey (省略可能): 参照アセンブリの署名に使用された公開鍵。;PublicKey [optional]: the public key that was used to sign the referenced assembly. これは、同じ短い名前を持つ 2 つ以上の参照アセンブリが読み込まれるときに使用されます。This is used when two or more referenced assemblies with the same short name are loaded.

    • ;component: 参照されるアセンブリが、ローカル アセンブリから参照されることを指定します。;component: specifies that the assembly being referred to is referenced from the local assembly.

    • /Path: 参照アセンブリのプロジェクト フォルダーのルートに対して相対的なパスを含むリソース ファイルの名前。/Path: the name of the resource file, including its path, relative to the root of the referenced assembly's project folder.

次の例では、参照アセンブリのプロジェクト フォルダーのルートにある XAMLXAML リソース ファイルのパック URI を示します。The following example shows the pack URI for a XAMLXAML resource file that is located in the root of the referenced assembly's project folder.

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml

次の例では、参照アセンブリのプロジェクト フォルダーのサブフォルダーにある XAMLXAML リソース ファイルのパック URI を示します。The following example shows the pack URI for a XAMLXAML resource file that is located in a subfolder of the referenced assembly's project folder.

pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml

次の例では、バージョン固有の参照アセンブリのプロジェクト フォルダーのルートにある XAMLXAML リソース ファイルのパック URI を示します。The following example shows the pack URI for a XAMLXAML resource file that is located in the root folder of a referenced, version-specific assembly's project folder.

pack://application:,,,/ReferencedAssembly;v1.0.0.1;component/ResourceFile.xaml

参照アセンブリ リソース ファイルのパック URI 構文は、application:/// オーソリティでのみ使用できます。Note that the pack URI syntax for referenced assembly resource files can be used only with the application:/// authority. たとえば、WPF では、次はサポートされません。For example, the following is not supported in WPF.

pack://siteoforigin:,,,/SomeAssembly;component/ResourceFile.xaml

コンテンツ ファイルのパック URIContent File Pack URIs

コンテンツ ファイルのパック URI では、次のオーソリティとパスを使用します。The pack URI for a content file uses the following authority and path:

  • オーソリティ: application:///。Authority: application:///.

  • パス:アプリケーションのメインの実行可能アセンブリのファイル システム位置に対して相対的なパスを含む、コンテンツ ファイルの名前。Path: The name of the content file, including its path relative to the file system location of the application's main executable assembly.

次の例では、実行可能アセンブリと同じフォルダーにある XAMLXAML コンテンツ ファイルのパック URI を示します。The following example shows the pack URI for a XAMLXAML content file, located in the same folder as the executable assembly.

pack://application:,,,/ContentFile.xaml

次の例では、アプリケーションの実行可能アセンブリに対して相対的なサブフォルダーにある XAMLXAML コンテンツ ファイルのパック URI を示します。The following example shows the pack URI for a XAMLXAML content file, located in a subfolder that is relative to the application's executable assembly.

pack://application:,,,/Subfolder/ContentFile.xaml

注意

HTML コンテンツ ファイルにナビゲートすることはできません。HTML content files cannot be navigated to. URI スキームでは、起点サイトにある HTML ファイルへのナビゲーションのみがサポートされます。The URI scheme only supports navigation to HTML files that are located at the site of origin.

起点サイトのパック URISite of Origin Pack URIs

起点サイト ファイルのパック URI では、次のオーソリティとパスを使用します。The pack URI for a site of origin file uses the following authority and path:

  • オーソリティ: siteoforigin:///。Authority: siteoforigin:///.

  • パス:実行可能アセンブリの起動元の位置に対して相対的なパスを含む起点サイト ファイルの名前。Path: The name of the site of origin file, including its path relative to the location from which the executable assembly was launched.

次の例では、実行可能アセンブリの起動元の位置に格納された XAMLXAML 起点サイト ファイルのパック URI を示します。The following example shows the pack URI for a XAMLXAML site of origin file, stored in the location from which the executable assembly is launched.

pack://siteoforigin:,,,/SiteOfOriginFile.xaml

次の例では、アプリケーションの実行可能アセンブリの起動元の位置に対して相対的なサブフォルダーに格納された XAMLXAML 起点サイト ファイルのパック URI を示します。The following example shows the pack URI for a XAMLXAML site of origin file, stored in subfolder that is relative to the location from which the application's executable assembly is launched.

pack://siteoforigin:,,,/Subfolder/SiteOfOriginFile.xaml

ページ ファイルPage Files

MSBuild の Page 項目として構成される XAML ファイルは、リソース ファイルと同じようにアセンブリにコンパイルされます。XAML files that are configured as MSBuild Page items are compiled into assemblies in the same way as resource files. したがって、MSBuild のPage 項目は、リソース ファイルのパック URI を使用して識別できます。Consequently, MSBuild Page items can be identified using pack URIs for resource files.

一般に MSBuild の Page 項目として構成される XAMLXAML ファイルの種類は、次のいずれかをルート要素として持ちます。The types of XAMLXAML files that are commonly configured as MSBuildPage items have one of the following as their root element:

絶対および相対パック URIAbsolute vs. Relative Pack URIs

完全修飾されたパック URI は、スキーム、オーソリティ、およびパスを含み、絶対パック URI とみなされます。A fully qualified pack URI includes the scheme, the authority, and the path, and it is considered an absolute pack URI. 開発者にとっての簡便さを考慮して、XAMLXAML 要素では、一般に、パスのみを含む相対パック URI で適切な属性を設定できます。As a simplification for developers, XAMLXAML elements typically allow you to set appropriate attributes with a relative pack URI, which includes only the path.

たとえば、ローカル アセンブリ内のリソース ファイルに対する次のような絶対パック URI を考えてみます。For example, consider the following absolute pack URI for a resource file in the local assembly.

pack://application:,,,/ResourceFile.xaml

このリソース ファイルを参照する相対パック URI は、次のようになります。The relative pack URI that refers to this resource file would be the following.

/ResourceFile.xaml

注意

起点サイト ファイルはアセンブリに関連付けられていないため、絶対パック URI でのみ参照できます。Because site of origin files are not associated with assemblies, they can only be referred to with absolute pack URIs.

既定では、相対パック URI は、参照を含んでいるマークアップまたはコードの位置に対して相対的とみなされます。By default, a relative pack URI is considered relative to the location of the markup or code that contains the reference. ただし、先頭にバック スラッシュが使用された場合、相対パック URI 参照は、アプリケーションのルートに対して相対的とみなされます。If a leading backslash is used, however, the relative pack URI reference is then considered relative to the root of the application. たとえば、次のようなプロジェクト構造を考えてみます。For example, consider the following project structure.

App.xaml

Page2.xaml

\SubFolder

+ Page1.xaml

+ Page2.xaml

Page1.xaml に、Root\SubFolder\Page2.xaml を参照する URI が含まれる場合、参照で次のような相対パック URI を使用することができます。If Page1.xaml contains a URI that references Root\SubFolder\Page2.xaml, the reference can use the following relative pack URI.

Page2.xaml

Page1.xaml に、Root\Page2.xaml を参照する URI が含まれる場合、参照で次のような相対パック URI を使用することができます。If Page1.xaml contains a URI that references Root\Page2.xaml, the reference can use the following relative pack URI.

/Page2.xaml

パック URI の解決Pack URI Resolution

パック URI の書式では、異なる種類のファイルのパック URI が同じに見えることがあります。The format of pack URIs makes it possible for pack URIs for different types of files to look the same. たとえば、次のような絶対パック URI を考えてみます。For example, consider the following absolute pack URI.

pack://application:,,,/ResourceOrContentFile.xaml

この絶対パック URI では、ローカル アセンブリ内のリソース ファイルまたはコンテンツ ファイルが参照されている可能性があります。This absolute pack URI could refer to either a resource file in the local assembly or a content file. 次の相対 URI も同様です。The same is true for the following relative URI.

/ResourceOrContentFile.xaml

パック URI で参照されているファイルの種類を判断するため、WPF では、次のヒューリスティックを使用して、ローカル アセンブリ内のリソース ファイルとコンテンツ ファイルの URI が解決されます。In order to determine the type of file that a pack URI refers to, WPF resolves URIs for resource files in local assemblies and content files by using the following heuristics:

  1. アセンブリ メタデータに、パック URI に一致する AssemblyAssociatedContentFileAttribute 属性があるかどうかを調べます。Probe the assembly metadata for an AssemblyAssociatedContentFileAttribute attribute that matches the pack URI.

  2. AssemblyAssociatedContentFileAttribute 属性が見つかった場合、パック URI ではコンテンツ ファイルが参照されています。If the AssemblyAssociatedContentFileAttribute attribute is found, the path of the pack URI refers to a content file.

  3. AssemblyAssociatedContentFileAttribute 属性が見つからなかった場合は、ローカル アセンブリにコンパイルされる設定リソース ファイルを調べます。If the AssemblyAssociatedContentFileAttribute attribute is not found, probe the set resource files that are compiled into the local assembly.

  4. パック URI のパスに一致するリソース ファイルが見つかった場合、パック URI のパスではリソース ファイルが参照されています。If a resource file that matches the path of the pack URI is found, the path of the pack URI refers to a resource file.

  5. リソースが見つからなかった場合、内部で作成された Uri は無効です。If the resource is not found, the internally created Uri is invalid.

URI 解決は、次を参照する URI には適用されません。URI resolution does not apply for URIs that refer to the following:

  • 参照アセンブリ内のコンテンツ ファイル: この種類のファイルは、WPF ではサポートされません。Content files in referenced assemblies: these file types are not supported by WPF.

  • 参照アセンブリ内の埋め込みファイル: これらは参照アセンブリの名前と ;component サフィックスの両方を含むため、これらを示す URI は一意です。Embedded files in referenced assemblies: URIs that identify them are unique because they include both the name of the referenced assembly and the ;component suffix.

  • 起点サイト ファイル: これらは siteoforigin:/// オーソリティを含むパック URI によって識別できる唯一のファイルであるため、これらを示す URI は一意です。Site of origin files: URIs that identify them are unique because they are the only files that can be identified by pack URIs that contain the siteoforigin:/// authority.

パック URI の解決によってもたらされる単純化の 1 つは、コードがリソース ファイルやコンテンツ ファイルの位置にあまり依存しなくなることです。One simplification that pack URI resolution allows is for code to be somewhat independent of the locations of resource and content files. たとえば、ローカル アセンブリ内のリソース ファイルがコンテンツ ファイルに再構成される場合、リソースのパック URI は同じままであり、パック URI を使用するコードも変わりません。For example, if you have a resource file in the local assembly that is reconfigured to be a content file, the pack URI for the resource remains the same, as does the code that uses the pack URI.

パック URI を使用したプログラミングProgramming with Pack URIs

多くの WPF クラスでは、次のように、パック URI で設定できるプロパティが実装されます。Many WPF classes implement properties that can be set with pack URIs, including:

これらのプロパティは、マークアップとコードのどちらからでも設定できます。These properties can be set from both markup and code. このセクションでは、両方の基本構造について説明してから、一般的なシナリオの例を示します。This section demonstrates the basic constructions for both and then shows examples of common scenarios.

マークアップでのパック URI の使用Using Pack URIs in Markup

パック URI は、マークアップでは、属性の要素にパック URI を設定することによって指定されます。A pack URI is specified in markup by setting the element of an attribute with the pack URI. 次に例を示します。For example:

<element attribute="pack://application:,,,/File.xaml" />

表 1 では、マークアップで指定できるさまざまな絶対パック URI を示します。Table 1 illustrates the various absolute pack URIs that you can specify in markup.

表 1:マークアップでの絶対パック URITable 1: Absolute Pack URIs in Markup

ファイルFile 絶対パック URIAbsolute pack URI
リソース ファイル - ローカル アセンブリResource file - local assembly "pack://application:,,,/ResourceFile.xaml"
サブフォルダー内のリソース ファイル - ローカル アセンブリResource file in subfolder - local assembly "pack://application:,,,/Subfolder/ResourceFile.xaml"
リソース ファイル - 参照アセンブリResource file - referenced assembly "pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml"
参照アセンブリのサブフォルダー内のリソース ファイルResource file in subfolder of referenced assembly "pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml"
バージョン管理された参照アセンブリ内のリソース ファイルResource file in versioned referenced assembly "pack://application:,,,/ReferencedAssembly;v1.0.0.0;component/ResourceFile.xaml"
コンテンツ ファイルContent file "pack://application:,,,/ContentFile.xaml"
サブフォルダー内のコンテンツ ファイルContent file in subfolder "pack://application:,,,/Subfolder/ContentFile.xaml"
起点サイト ファイルSite of origin file "pack://siteoforigin:,,,/SOOFile.xaml"
サブフォルダー内の起点サイト ファイルSite of origin file in subfolder "pack://siteoforigin:,,,/Subfolder/SOOFile.xaml"

表 2 では、マークアップで指定できるさまざまな相対パック URI を示します。Table 2 illustrates the various relative pack URIs that you can specify in markup.

表 2:マークアップでの相対パック URITable 2: Relative Pack URIs in Markup

ファイルFile 相対パック URIRelative pack URI
ローカル アセンブリ内のリソース ファイルResource file in local assembly "/ResourceFile.xaml"
ローカル アセンブリのサブフォルダー内のリソース ファイルResource file in subfolder of local assembly "/Subfolder/ResourceFile.xaml"
参照アセンブリ内のリソース ファイルResource file in referenced assembly "/ReferencedAssembly;component/ResourceFile.xaml"
参照アセンブリのサブフォルダー内のリソース ファイルResource file in subfolder of referenced assembly "/ReferencedAssembly;component/Subfolder/ResourceFile.xaml"
コンテンツ ファイルContent file "/ContentFile.xaml"
サブフォルダー内のコンテンツ ファイルContent file in subfolder "/Subfolder/ContentFile.xaml"

コードでのパック URI の使用Using Pack URIs in Code

コードでパック URI を指定するには、Uri クラスをインスタンス化して、コンストラクターのパラメーターとしてパック URI を渡します。You specify a pack URI in code by instantiating the Uri class and passing the pack URI as a parameter to the constructor. このコード例を次に示します。This is demonstrated in the following example.

Uri uri = new Uri("pack://application:,,,/File.xaml");

既定では、Uri クラスではパック URI は絶対とみなされます。By default, the Uri class considers pack URIs to be absolute. そのため、相対パック URI で Uri クラスのインスタンスが作成されると、例外が発生します。Consequently, an exception is raised when an instance of the Uri class is created with a relative pack URI.

Uri uri = new Uri("/File.xaml");

幸いにも、Uri クラス コンストラクターの Uri(String, UriKind) オーバーロードでは、UriKind 型のパラメーターを受け入れるため、パック URI が絶対か相対かを指定できます。Fortunately, the Uri(String, UriKind) overload of the Uri class constructor accepts a parameter of type UriKind to allow you to specify whether a pack URI is either absolute or relative.

// Absolute URI (default)
Uri absoluteUri = new Uri("pack://application:,,,/File.xaml", UriKind.Absolute);
// Relative URI
Uri relativeUri = new Uri("/File.xaml",
                        UriKind.Relative);

提供されたパック URI がどちらであるかわかっているときには、Absolute または Relative のみを指定する必要があります。You should specify only Absolute or Relative when you are certain that the provided pack URI is one or the other. ユーザーが実行時にパック URI を入力するときなど、使用されるパック URI の種類がわからない場合は、代わりに RelativeOrAbsolute を使用します。If you don't know the type of pack URI that is used, such as when a user enters a pack URI at run time, use RelativeOrAbsolute instead.

// Relative or Absolute URI provided by user via a text box
TextBox userProvidedUriTextBox = new TextBox();
Uri uri = new Uri(userProvidedUriTextBox.Text, UriKind.RelativeOrAbsolute);

表 3 では、System.Uri を使用してコードで指定できるさまざまな相対パック URI を示します。Table 3 illustrates the various relative pack URIs that you can specify in code by using System.Uri.

表 3:コードでの絶対パック URITable 3: Absolute Pack URIs in Code

ファイルFile 絶対パック URIAbsolute pack URI
リソース ファイル - ローカル アセンブリResource file - local assembly Uri uri = new Uri("pack://application:,,,/ResourceFile.xaml", UriKind.Absolute);
サブフォルダー内のリソース ファイル - ローカル アセンブリResource file in subfolder - local assembly Uri uri = new Uri("pack://application:,,,/Subfolder/ResourceFile.xaml", UriKind.Absolute);
リソース ファイル - 参照アセンブリResource file - referenced assembly Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Absolute);
参照アセンブリのサブフォルダー内のリソース ファイルResource file in subfolder of referenced assembly Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Absolute);
バージョン管理された参照アセンブリ内のリソース ファイルResource file in versioned referenced assembly Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;v1.0.0.0;component/ResourceFile.xaml", UriKind.Absolute);
コンテンツ ファイルContent file Uri uri = new Uri("pack://application:,,,/ContentFile.xaml", UriKind.Absolute);
サブフォルダー内のコンテンツ ファイルContent file in subfolder Uri uri = new Uri("pack://application:,,,/Subfolder/ContentFile.xaml", UriKind.Absolute);
起点サイト ファイルSite of origin file Uri uri = new Uri("pack://siteoforigin:,,,/SOOFile.xaml", UriKind.Absolute);
サブフォルダー内の起点サイト ファイルSite of origin file in subfolder Uri uri = new Uri("pack://siteoforigin:,,,/Subfolder/SOOFile.xaml", UriKind.Absolute);

表 4 では、System.Uri を使用してコードで指定できるさまざまな相対パック URI を示します。Table 4 illustrates the various relative pack URIs that you can specify in code using System.Uri.

表 4:コードでの相対パック URITable 4: Relative Pack URIs in Code

ファイルFile 相対パック URIRelative pack URI
リソース ファイル - ローカル アセンブリResource file - local assembly Uri uri = new Uri("/ResourceFile.xaml", UriKind.Relative);
サブフォルダー内のリソース ファイル - ローカル アセンブリResource file in subfolder - local assembly Uri uri = new Uri("/Subfolder/ResourceFile.xaml", UriKind.Relative);
リソース ファイル - 参照アセンブリResource file - referenced assembly Uri uri = new Uri("/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Relative);
サブフォルダー内のリソース ファイル - 参照アセンブリResource file in subfolder - referenced assembly Uri uri = new Uri("/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Relative);
コンテンツ ファイルContent file Uri uri = new Uri("/ContentFile.xaml", UriKind.Relative);
サブフォルダー内のコンテンツ ファイルContent file in subfolder Uri uri = new Uri("/Subfolder/ContentFile.xaml", UriKind.Relative);

一般的なパック URI のシナリオCommon Pack URI Scenarios

以前のセクションでは、パック URI を構築して、リソース ファイル、コンテンツ ファイル、および起点サイト ファイルを識別する方法を説明しました。The preceding sections have discussed how to construct pack URIs to identify resource, content, and site of origin files. WPF では、このような構築はさまざまな方法で使用されますが、以下のセクションでは、いくつかの一般的な用途について説明します。In WPF, these constructions are used in a variety of ways, and the following sections cover several common usages.

アプリケーションの起動時に表示する UI の指定Specifying the UI to Show When an Application Starts

StartupUri では、WPF アプリケーションの起動時に表示する最初の UIUI を指定します。StartupUri specifies the first UIUI to show when a WPF application is launched. スタンドアロン アプリケーションの場合、次の例に示されているように、UIUI としてウィンドウを使用できます。For standalone applications, the UIUI can be a window, as shown in the following example.

<Application
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    StartupUri="MainWindow.xaml" />

スタンドアロン アプリケーションと XAML ブラウザー アプリケーション (XBAP) では、次の例に示されているように、最初の UI としてページを指定することもできます。Standalone applications and XAML browser applications (XBAPs) can also specify a page as the initial UI, as shown in the following example.

<Application
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    StartupUri="HomePage.xaml" />

アプリケーションがスタンドアロン アプリケーションであり、ページが StartupUri で指定されている場合、WPF は NavigationWindow を開いて、ページをホストします。If the application is a standalone application and a page is specified with StartupUri, WPF opens a NavigationWindow to host the page. XBAP の場合、ページはホスト ブラウザーに表示されます。For XBAPs, the page is shown in the host browser.

次の例は、ページにナビゲートする方法を示しています。The following example shows how to navigate to a page.

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  WindowTitle="Page With Hyperlink"
  WindowWidth="250"
  WindowHeight="250">
<Hyperlink NavigateUri="UriOfPageToNavigateTo.xaml">
  Navigate to Another Page
</Hyperlink>
</Page>

WPF でのさまざまなナビゲートの方法については、「ナビゲーションの概要」を参照してください。For more information on the various ways to navigate in WPF, see Navigation Overview.

ウィンドウ アイコンの指定Specifying a Window Icon

次の例は、URI を使用してウィンドウのアイコンを指定する方法を示しています。The following example shows how to use a URI to specify a window's icon.

<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="SDKSample.MainWindow"
    Icon="WPFIcon1.ico">
</Window>

詳細については、「Icon」を参照してください。For more information, see Icon.

イメージ ファイル、オーディオ ファイル、およびビデオ ファイルの読み込みLoading Image, Audio, and Video Files

WPF では、アプリケーションはさまざまな種類のメディアを使用でき、次の例に示されているように、そのすべてをパック URI で示して、読み込むことができます。WPF allows applications to use a wide variety of media types, all of which can be identified and loaded with pack URIs, as shown in the following examples.

<MediaElement Stretch="Fill" LoadedBehavior="Play" Source="pack://siteoforigin:,,,/Media/bee.wmv" />
<MediaElement Stretch="Fill" LoadedBehavior="Play" Source="pack://siteoforigin:,,,/Media/ringin.wav" />
<Image Source="Images/Watermark.png" />

メディア コンテンツの操作方法の詳細については、「グラフィックスとマルチ メディア」を参照してください。For more information on working with media content, see Graphics and Multimedia.

起点サイトからのリソース ディクショナリの読み込みLoading a Resource Dictionary from the Site of Origin

リソース ディクショナリ (ResourceDictionary) を使用して、アプリケーションのテーマをサポートできます。Resource dictionaries (ResourceDictionary) can be used to support application themes. テーマを作成し、管理する方法の 1 つは、複数のテーマをリソース ディクショナリとして作成して、アプリケーションの起点サイトに配置することです。One way to create and manage themes is to create multiple themes as resource dictionaries that are located at an application's site of origin. これにより、アプリケーションを再コンパイルして再配置しなくても、テーマの追加と交信が可能です。This allows themes to be added and updated without recompiling and redeploying an application. これらのリソース ディクショナリは、次の例に示されているように、パック URI を使用して示し、読み込むことができます。These resource dictionaries can be identified and loaded using pack URIs, which is shown in the following example.

<Application
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    StartupUri="HomePage.xaml">
  <Application.Resources>
    <ResourceDictionary Source="pack://siteoforigin:,,,/PageTheme.xaml" />
  </Application.Resources>
</Application>

WPF でのテーマの概要については、「スタイルとテンプレート」を参照してください。For an overview of themes in WPF, see Styling and Templating.

関連項目See also