URIs "pack://" no WPFPack URIs in WPF

No Windows Presentation Foundation (WPF), URIs (uniform resource identifiers)uniform resource identifiers (URIs) são usados para identificar e carregar arquivos de várias maneiras, incluindo o seguinte:In Windows Presentation Foundation (WPF), URIs (uniform resource identifiers)uniform resource identifiers (URIs) are used to identify and load files in many ways, including the following:

  • Especificando o UI (interface do usuário)user interface (UI) para mostrar quando um aplicativo iniciado pela primeira vez.Specifying the UI (interface do usuário)user interface (UI) to show when an application first starts.

  • Carregar imagens.Loading images.

  • Navegar até as páginas.Navigating to pages.

  • Carregar arquivos de dados não executáveis.Loading non-executable data files.

Além disso, URIsURIs pode ser usado para identificar e carregar arquivos de uma variedade de locais, incluindo o seguinte:Furthermore, URIsURIs can be used to identify and load files from a variety of locations, including the following:

  • O assembly atual.The current assembly.

  • Um assembly referenciado.A referenced assembly.

  • Um local relativo a um assembly.A location relative to an assembly.

  • O site de origem do aplicativo.The application's site of origin.

Para fornecer um mecanismo consistente para identificar e carregar esses tipos de arquivos a partir desses locais, WPFWPF utiliza a extensibilidade do esquema de URI de pacote.To provide a consistent mechanism for identifying and loading these types of files from these locations, WPFWPF leverages the extensibility of the pack URI scheme. Este tópico fornece uma visão geral do esquema, aborda como criar pacote URIsURIs para uma variedade de cenários, discute absolute e relative URIsURIs e URIURI resolução, antes de mostrar como usar o pacote de URIsURIs de ambos os marcação e o código.This topic provides an overview of the scheme, covers how to construct pack URIsURIs for a variety of scenarios, discusses absolute and relative URIsURIs and URIURI resolution, before showing how to use pack URIsURIs from both markup and code.

O esquema de URI de pacoteThe Pack URI Scheme

O pacote de URIURI esquema é usada pelo Open Packaging Conventions especificação (OPC), que descreve um modelo para organizar e identificar conteúdo.The pack URIURI scheme is used by the Open Packaging Conventions (OPC) specification, which describes a model for organizing and identifying content. Os principais elementos desse modelo são pacotes e partes, onde um pacote é um contêiner lógico para uma ou mais lógica partes.The key elements of this model are packages and parts, where a package is a logical container for one or more logical parts. A imagem a seguir ilustra esse conceito.The following figure illustrates this concept.

Diagrama de pacote e peçasPackage and Parts diagram

Para identificar partes, a especificação OPC utiliza a extensibilidade do RFC 2396 (identificadores de recurso uniforme (URI): sintaxe genérica) para definir o pacote URIURI esquema.To identify parts, the OPC specification leverages the extensibility of RFC 2396 (Uniform Resource Identifiers (URI): Generic Syntax) to define the pack URIURI scheme.

O esquema especificado por um URIURI é definido por seu prefixo; http, ftp e file são exemplos bem conhecidos.The scheme that is specified by a URIURI is defined by its prefix; http, ftp, and file are well-known examples. O pacote de URIURI esquema utiliza "pack" como seu esquema e contém dois componentes: autoridade e caminho.The pack URIURI scheme uses "pack" as its scheme, and contains two components: authority and path. Este é o formato para um pacote de URIURI.The following is the format for a pack URIURI.

pacote: / /autoridade/caminhopack://authority/path

O autoridade Especifica o tipo de pacote que contém a parte, enquanto o caminho Especifica o local de uma parte dentro de um pacote.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.

Esse conceito é ilustrado pela figura a seguir:This concept is illustrated by the following figure:

Relação entre pacote, autoridade e caminhoRelationship among package, authority, and path

Os pacotes e peças são análogos a aplicativos e arquivos, pois um aplicativo (pacote) pode incluir um ou mais arquivos (peças), incluindo:Packages and parts are analogous to applications and files, where an application (package) can include one or more files (parts), including:

  • Arquivos de recursos que são compilados no assembly local.Resource files that are compiled into the local assembly.

  • Arquivos de recursos que são compilados em um assembly referenciado.Resource files that are compiled into a referenced assembly.

  • Arquivos de recursos que são compilados em um assembly de referência.Resource files that are compiled into a referencing assembly.

  • Arquivos de conteúdo.Content files.

  • Arquivos de site de origem.Site of origin files.

Para acessar esses tipos de arquivos, WPFWPF suporta duas autoridades: application: / / / e siteoforigin: / / /.To access these types of files, WPFWPF supports two authorities: application:/// and siteoforigin:///. A autoridade application:/// identifica arquivos de dados de aplicativo que são conhecidos no tempo de compilação, incluindo arquivos de recurso e conteúdo.The application:/// authority identifies application data files that are known at compile time, including resource and content files. A autoridade siteoforigin:/// identifica arquivos de site de origem.The siteoforigin:/// authority identifies site of origin files. O escopo de cada autoridade é mostrado na figura a seguir.The scope of each authority is shown in the following figure.

Diagrama de URI de pacotePack URI diagram

Observação

O componente de autoridade de um pacote de URIURI é inserida URIURI que aponta para um pacote de acordo com RFC 2396.The authority component of a pack URIURI is an embedded URIURI that points to a package and must conform to RFC 2396. Além disso, o caractere “/” deve ser substituído pelo caractere “,”; caracteres reservados como “%” e “?” devem ser ignorados.Additionally, the "/" character must be replaced with the "," character, and reserved characters such as "%" and "?" must be escaped. Para ver os detalhes, consulte o OPC.See the OPC for details.

As seções a seguir explicam como criar pacote URIsURIs usando estas duas autoridades em conjunto com os caminhos apropriados para a identificação de recurso, o conteúdo e o local dos arquivos de origem.The following sections explain how to construct pack URIsURIs using these two authorities in conjunction with the appropriate paths for identifying resource, content, and site of origin files.

URIs de pacote de arquivo de recursoResource File Pack URIs

Arquivos de recurso são configurados como MSBuildMSBuild Resource itens e são compilados em assemblies.Resource files are configured as MSBuildMSBuildResource items and are compiled into assemblies. WPFWPF oferece suporte a construção de pacote URIsURIs que pode ser usado para identificar arquivos de recursos que são compilados no assembly local ou compilados em um assembly que é referenciado no assembly local. supports the construction of pack URIsURIs 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.

Arquivo de recurso de assembly localLocal Assembly Resource File

O pacote de URIURI para um recurso de arquivo que é compilado no assembly local usa a seguinte autoridade e caminho:The pack URIURI for a resource file that is compiled into the local assembly uses the following authority and path:

  • Autoridade: application:///.Authority: application:///.

  • Caminho: o nome do arquivo de recurso, incluindo seu caminho, em relação à raiz da pasta de projeto do assembly local.Path: The name of the resource file, including its path, relative to the local assembly project folder root.

O exemplo a seguir mostra o pacote de URIURI para um XAMLXAML arquivo de recurso que está localizado na raiz da pasta de projeto do assembly local.The following example shows the pack URIURI for a XAMLXAML resource file that is located in the root of the local assembly's project folder.

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

O exemplo a seguir mostra o pacote de URIURI para um XAMLXAML arquivo de recurso que está localizado em uma subpasta da pasta de projeto do assembly local.The following example shows the pack URIURI for a XAMLXAML resource file that is located in a subfolder of the local assembly's project folder.

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

Arquivo de recurso de assembly referenciadoReferenced Assembly Resource File

O pacote de URIURI para um recurso de arquivo que é compilado em um assembly referenciado utiliza a seguinte autoridade e caminho:The pack URIURI for a resource file that is compiled into a referenced assembly uses the following authority and path:

  • Autoridade: application:///.Authority: application:///.

  • Caminho: o nome de um arquivo de recurso compilado em um assembly referenciado.Path: The name of a resource file that is compiled into a referenced assembly. O caminho deve estar de acordo com o seguinte formato:The path must conform to the following format:

    AssemblyShortName{; Versão] {; PublicKey]; component /caminhoAssemblyShortName{;Version]{;PublicKey];component/Path

    • AssemblyShortName: o nome curto do assembly referenciado.AssemblyShortName: the short name for the referenced assembly.

    • ;Version [opcional]: a versão do assembly referenciado que contém o arquivo de recurso.;Version [optional]: the version of the referenced assembly that contains the resource file. É usada quando são carregados dois ou mais assemblies referenciados com o mesmo nome curto.This is used when two or more referenced assemblies with the same short name are loaded.

    • ;PublicKey [opcional]: a chave pública que foi usada para assinar o assembly referenciado.;PublicKey [optional]: the public key that was used to sign the referenced assembly. É usada quando são carregados dois ou mais assemblies referenciados com o mesmo nome curto.This is used when two or more referenced assemblies with the same short name are loaded.

    • ;component: especifica que o assembly referenciado é referenciado a partir do assembly local.;component: specifies that the assembly being referred to is referenced from the local assembly.

    • /Path: o nome do arquivo de recurso, incluindo o caminho, em relação à raiz da pasta de projeto do assembly referenciado./Path: the name of the resource file, including its path, relative to the root of the referenced assembly's project folder.

O exemplo a seguir mostra o pacote de URIURI para um XAMLXAML arquivo de recurso que está localizado na raiz da pasta de projeto do assembly referenciado.The following example shows the pack URIURI for a XAMLXAML resource file that is located in the root of the referenced assembly's project folder.

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

O exemplo a seguir mostra o pacote de URIURI para um XAMLXAML arquivo de recurso que está localizado em uma subpasta da pasta de projeto do assembly referenciado.The following example shows the pack URIURI 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

O exemplo a seguir mostra o pacote de URIURI para um XAMLXAML arquivo de recurso que está localizado na pasta raiz da pasta de projeto de uma versão específica de assembly referenciado.The following example shows the pack URIURI 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

Observe que o pacote URIURI sintaxe para arquivos de recurso de assembly referenciado pode ser usada apenas com o aplicativo: / / / autoridade.Note that the pack URIURI syntax for referenced assembly resource files can be used only with the application:/// authority. Por exemplo, o seguinte não é suportado em WPFWPF.For example, the following is not supported in WPFWPF.

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

URIs de pacote de arquivo de conteúdoContent File Pack URIs

O pacote de URIURI para um arquivo de conteúdo utiliza os seguintes autoridade e caminho:The pack URIURI for a content file uses the following authority and path:

  • Autoridade: application:///.Authority: application:///.

  • Caminho: o nome do arquivo de conteúdo, incluindo o caminho em relação ao local do sistema de arquivos do principal assembly executável do aplicativo.Path: The name of the content file, including its path relative to the file system location of the application's main executable assembly.

O exemplo a seguir mostra o pacote de URIURI para um XAMLXAML arquivo de conteúdo, localizado na mesma pasta do assembly executável.The following example shows the pack URIURI for a XAMLXAML content file, located in the same folder as the executable assembly.

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

O exemplo a seguir mostra o pacote de URIURI para um XAMLXAML arquivo de conteúdo, localizado em uma subpasta que é relativo ao assembly executável do aplicativo.The following example shows the pack URIURI for a XAMLXAML content file, located in a subfolder that is relative to the application's executable assembly.

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

Observação

Não é possível acessar os arquivos de conteúdo do HTMLHTML.HTMLHTML content files cannot be navigated to. O URIURI esquema só oferece suporte à navegação para HTMLHTML arquivos que estão localizados no site de origem.The URIURI scheme only supports navigation to HTMLHTML files that are located at the site of origin.

URIs de pacote de site de origemSite of Origin Pack URIs

O pacote de URIURI para um site de origem arquivo usa a seguinte autoridade e caminho:The pack URIURI for a site of origin file uses the following authority and path:

  • Autoridade: siteoforigin:///.Authority: siteoforigin:///.

  • Caminho: o nome do arquivo de site de origem, incluindo o caminho em relação ao local a partir do qual o assembly executável foi iniciado.Path: The name of the site of origin file, including its path relative to the location from which the executable assembly was launched.

O exemplo a seguir mostra o pacote de URIURI para um XAMLXAML local do arquivo de origem, armazenado no local de onde o assembly executável foi lançado.The following example shows the pack URIURI for a XAMLXAML site of origin file, stored in the location from which the executable assembly is launched.

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

O exemplo a seguir mostra o pacote de URIURI para um XAMLXAML local do arquivo de origem, armazenado na subpasta é relativo ao local de onde o assembly executável do aplicativo é iniciado.The following example shows the pack URIURI 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

Arquivos de paginaçãoPage Files

XAMLXAML arquivos que são configurados como MSBuildMSBuild Page itens são compilados em assemblies da mesma forma como arquivos de recurso. files that are configured as MSBuildMSBuildPage items are compiled into assemblies in the same way as resource files. Consequentemente, MSBuildMSBuild Page itens podem ser identificados usando o pacote URIsURIs para arquivos de recurso.Consequently, MSBuildMSBuildPage items can be identified using pack URIsURIs for resource files.

Os tipos de XAMLXAML arquivos normalmente são configurados como MSBuildMSBuild Page itens têm um dos seguintes como seu elemento raiz:The types of XAMLXAML files that are commonly configured as MSBuildMSBuildPage items have one of the following as their root element:

Vs absolutos. URIs de pacote relativaAbsolute vs. Relative Pack URIs

Um pacote completo URIURI inclui o esquema, a autoridade e o caminho, e é considerado um pacote absoluto URIURI.A fully qualified pack URIURI includes the scheme, the authority, and the path, and it is considered an absolute pack URIURI. Como simplificação para desenvolvedores, XAMLXAML elementos normalmente permitem que você defina os atributos apropriados com um pacote relativo URIURI, que inclui apenas o caminho.As a simplification for developers, XAMLXAML elements typically allow you to set appropriate attributes with a relative pack URIURI, which includes only the path.

Por exemplo, considere o seguinte pacote absoluto URIURI para um arquivo de recurso no assembly local.For example, consider the following absolute pack URIURI for a resource file in the local assembly.

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

O pacote relativo URIURI que se refere a esse recurso arquivo seria o seguinte.The relative pack URIURI that refers to this resource file would be the following.

/ResourceFile.xaml

Observação

Porque o site de arquivos de origem não estão associados a assemblies, eles só podem ser referenciados em absoluto pack URIsURIs.Because site of origin files are not associated with assemblies, they can only be referred to with absolute pack URIsURIs.

Por padrão, um pacote relativo URIURI é considerado relativo ao local da marcação ou código que contém a referência.By default, a relative pack URIURI is considered relative to the location of the markup or code that contains the reference. Se uma barra invertida inicial for usada, no entanto, o pacote URIURI referência é considerada em relação à raiz do aplicativo.If a leading backslash is used, however, the relative pack URIURI reference is then considered relative to the root of the application. Considere, por exemplo, a estrutura de projeto a seguir.For example, consider the following project structure.

App.xaml

Page2.xaml

\SubFolder

+ Page1.xaml

+ Page2.xaml

Se Page1 contém um URIURI que referencia raiz\SubFolder\Page2.xaml, a referência pode usar o seguinte pacote relativa URIURI.If Page1.xaml contains a URIURI that references Root\SubFolder\Page2.xaml, the reference can use the following relative pack URIURI.

Page2.xaml

Se Page1 contém um URIURI que referencia raiz\Page2.xaml, a referência pode usar o seguinte pacote relativa URIURI.If Page1.xaml contains a URIURI that references Root\Page2.xaml, the reference can use the following relative pack URIURI.

/Page2.xaml

Resolução de URI de pacotePack URI Resolution

O formato de pacote URIsURIs tornam possível para o pacote de URIsURIs para diferentes tipos de arquivos para a mesma aparência.The format of pack URIsURIs makes it is possible for pack URIsURIs for different types of files to look the same. Por exemplo, considere o seguinte pacote absoluto URIURI.For example, consider the following absolute pack URIURI.

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

Este pacote absoluto URIURI pode se referir a um arquivo de recurso no assembly local ou um arquivo de conteúdo.This absolute pack URIURI could refer to either a resource file in the local assembly or a content file. O mesmo é verdadeiro para seguir relativa URIURI.The same is true for the following relative URIURI.

/ResourceOrContentFile.xaml

Para determinar o tipo de arquivo que um pacote URIURI se refere, WPFWPF resolve URIsURIs para arquivos de recurso em assemblies locais e arquivos de conteúdo usando a heurística do seguinte:In order to determine the type of file that a pack URIURI refers to, WPFWPF resolves URIsURIs for resource files in local assemblies and content files by using the following heuristics:

  1. Teste os metadados de assembly para um AssemblyAssociatedContentFileAttribute atributo que coincide com o pacote URIURI.Probe the assembly metadata for an AssemblyAssociatedContentFileAttribute attribute that matches the pack URIURI.

  2. Se o AssemblyAssociatedContentFileAttribute atributo for encontrado, o caminho do pacote de URIURI se refere a um arquivo de conteúdo.If the AssemblyAssociatedContentFileAttribute attribute is found, the path of the pack URIURI refers to a content file.

  3. Se o AssemblyAssociatedContentFileAttribute atributo não for encontrado, verificar o conjunto de arquivos de recursos que é compilados no assembly local.If the AssemblyAssociatedContentFileAttribute attribute is not found, probe the set resource files that are compiled into the local assembly.

  4. Se um arquivo de recurso que corresponde ao caminho do pacote de URIURI for encontrado, o caminho do pacote de URIURI se refere a um arquivo de recurso.If a resource file that matches the path of the pack URIURI is found, the path of the pack URIURI refers to a resource file.

  5. Se o recurso não for encontrado, criado internamente Uri é inválido.If the resource is not found, the internally created Uri is invalid.

URIURI resolução não se aplica a URIsURIs que se referem ao seguinte: resolution does not apply for URIsURIs that refer to the following:

  • Arquivos de conteúdo em assemblies referenciados: não há suporte para esses tipos de arquivo por WPFWPF.Content files in referenced assemblies: these file types are not supported by WPFWPF.

  • Arquivos incorporados em assemblies referenciados: URIsURIs que possa identificá-los são exclusivos, pois eles incluem o nome do assembly referenciado e o ;component sufixo.Embedded files in referenced assemblies: URIsURIs that identify them are unique because they include both the name of the referenced assembly and the ;component suffix.

  • Site de arquivos de origem: URIsURIs que possa identificá-los são exclusivas porque são apenas os arquivos que podem ser identificados pelo pacote URIsURIs que contêm o siteoforigin: / / / autoridade.Site of origin files: URIsURIs that identify them are unique because they are the only files that can be identified by pack URIsURIs that contain the siteoforigin:/// authority.

Simplificação de um pacote URIURI resolução permite é para código ser independente dos locais de arquivos de conteúdo e recursos.One simplification that pack URIURI resolution allows is for code to be somewhat independent of the locations of resource and content files. Por exemplo, se você tiver um arquivo de recurso no assembly local reconfigurado como um arquivo de conteúdo, o pacote de URIURI para o recurso permanece o mesmo, assim como o código que usa o pacote URIURI.For example, if you have a resource file in the local assembly that is reconfigured to be a content file, the pack URIURI for the resource remains the same, as does the code that uses the pack URIURI.

Programando com URIs de pacoteProgramming with Pack URIs

Muitos WPFWPF classes implementam propriedades que podem ser definidas com o pacote URIsURIs, incluindo:Many WPFWPF classes implement properties that can be set with pack URIsURIs, including:

Essas propriedades podem ser definidas a partir de marcação e código.These properties can be set from both markup and code. Esta seção demonstra as construções básicas para ambos e, depois, mostra exemplos de cenários comuns.This section demonstrates the basic constructions for both and then shows examples of common scenarios.

Utilizando URIs de pacote em marcaçãoUsing Pack URIs in Markup

Um pacote URIURI é especificada em marcação definindo o elemento de um atributo com o pacote URIURI.A pack URIURI is specified in markup by setting the element of an attribute with the pack URIURI. Por exemplo:For example:

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

Tabela 1 ilustra o pacote absoluto vários URIsURIs que você pode especificar na marcação.Table 1 illustrates the various absolute pack URIsURIs that you can specify in markup.

Tabela 1: URIs de pacote absolutos em marcaçãoTable 1: Absolute Pack URIs in Markup

ArquivoFile Pacote absoluto URIURIAbsolute pack URIURI
Arquivo de recurso - assembly localResource file - local assembly "pack://application:,,,/ResourceFile.xaml"
Arquivo de recurso em subpasta - assembly localResource file in subfolder - local assembly "pack://application:,,,/Subfolder/ResourceFile.xaml"
Arquivo de recurso - assembly referenciadoResource file - referenced assembly "pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml"
Arquivo de recurso em subpasta de assembly referenciadoResource file in subfolder of referenced assembly "pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml"
Arquivo de recurso em assembly referenciado com controle de versãoResource file in versioned referenced assembly "pack://application:,,,/ReferencedAssembly;v1.0.0.0;component/ResourceFile.xaml"
Arquivo de conteúdoContent file "pack://application:,,,/ContentFile.xaml"
Arquivo de conteúdo em subpastaContent file in subfolder "pack://application:,,,/Subfolder/ContentFile.xaml"
Arquivo de site de origemSite of origin file "pack://siteoforigin:,,,/SOOFile.xaml"
Arquivo de site de origem em subpastaSite of origin file in subfolder "pack://siteoforigin:,,,/Subfolder/SOOFile.xaml"

Tabela 2 ilustra o pacote relativo vários URIsURIs que você pode especificar na marcação.Table 2 illustrates the various relative pack URIsURIs that you can specify in markup.

Tabela 2: URIs de pacote relativos em marcaçãoTable 2: Relative Pack URIs in Markup

ArquivoFile Pacote relativa URIURIRelative pack URIURI
Arquivo de recurso em assembly localResource file in local assembly "/ResourceFile.xaml"
Arquivo de recurso em subpasta de assembly localResource file in subfolder of local assembly "/Subfolder/ResourceFile.xaml"
Arquivo de recurso em assembly referenciadoResource file in referenced assembly "/ReferencedAssembly;component/ResourceFile.xaml"
Arquivo de recurso em subpasta de assembly referenciadoResource file in subfolder of referenced assembly "/ReferencedAssembly;component/Subfolder/ResourceFile.xaml"
Arquivo de conteúdoContent file "/ContentFile.xaml"
Arquivo de conteúdo em subpastaContent file in subfolder "/Subfolder/ContentFile.xaml"

Utilizando URIs de pacote em códigoUsing Pack URIs in Code

Especifique um pacote URIURI em código instanciando a Uri classe e passar o pacote URIURI como um parâmetro para o construtor.You specify a pack URIURI in code by instantiating the Uri class and passing the pack URIURI as a parameter to the constructor. Isso é demonstrado no exemplo a seguir.This is demonstrated in the following example.

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

Por padrão, o Uri classe considera pacote URIsURIs ser absoluto.By default, the Uri class considers pack URIsURIs to be absolute. Consequentemente, uma exceção é gerada quando uma instância do Uri classe é criada com um pacote relativo URIURI.Consequently, an exception is raised when an instance of the Uri class is created with a relative pack URIURI.

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

Felizmente, o Uri(String, UriKind) de sobrecarga do Uri construtor de classe aceita um parâmetro de tipo UriKind para permitir que você especifique se um pacote URIURI é absoluta ou relativa.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 URIURI 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);  

Você deve especificar somente Absolute ou Relative quando você tiver certeza de que o pacote fornecido URIURI é um ou outro.You should specify only Absolute or Relative when you are certain that the provided pack URIURI is one or the other. Se você não souber o tipo de pacote URIURI que é usada, como quando um usuário entra em um pacote de URIURI em tempo de execução, use RelativeOrAbsolute em vez disso.If you don't know the type of pack URIURI that is used, such as when a user enters a pack URIURI 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);  

Tabela 3 ilustra o pacote relativo vários URIsURIs que você pode especificar no código usando System.Uri.Table 3 illustrates the various relative pack URIsURIs that you can specify in code by using System.Uri.

Tabela 3: URIs de pacote absolutos em códigoTable 3: Absolute Pack URIs in Code

ArquivoFile Pacote absoluto URIURIAbsolute pack URIURI
Arquivo de recurso - assembly localResource file - local assembly Uri uri = new Uri("pack://application:,,,/ResourceFile.xaml", UriKind.Absolute);
Arquivo de recurso em subpasta - assembly localResource file in subfolder - local assembly Uri uri = new Uri("pack://application:,,,/Subfolder/ResourceFile.xaml", UriKind.Absolute);
Arquivo de recurso - assembly referenciadoResource file - referenced assembly Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Absolute);
Arquivo de recurso em subpasta de assembly referenciadoResource file in subfolder of referenced assembly Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Absolute);
Arquivo de recurso em assembly referenciado com controle de versãoResource file in versioned referenced assembly Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;v1.0.0.0;component/ResourceFile.xaml", UriKind.Absolute);
Arquivo de conteúdoContent file Uri uri = new Uri("pack://application:,,,/ContentFile.xaml", UriKind.Absolute);
Arquivo de conteúdo em subpastaContent file in subfolder Uri uri = new Uri("pack://application:,,,/Subfolder/ContentFile.xaml", UriKind.Absolute);
Arquivo de site de origemSite of origin file Uri uri = new Uri("pack://siteoforigin:,,,/SOOFile.xaml", UriKind.Absolute);
Arquivo de site de origem em subpastaSite of origin file in subfolder Uri uri = new Uri("pack://siteoforigin:,,,/Subfolder/SOOFile.xaml", UriKind.Absolute);

Tabela 4 ilustra o pacote relativo vários URIsURIs que você pode especificar no código usando System.Uri.Table 4 illustrates the various relative pack URIsURIs that you can specify in code using System.Uri.

Tabela 4: URIs de pacote relativos em códigoTable 4: Relative Pack URIs in Code

ArquivoFile Pacote relativa URIURIRelative pack URIURI
Arquivo de recurso - assembly localResource file - local assembly Uri uri = new Uri("/ResourceFile.xaml", UriKind.Relative);
Arquivo de recurso em subpasta - assembly localResource file in subfolder - local assembly Uri uri = new Uri("/Subfolder/ResourceFile.xaml", UriKind.Relative);
Arquivo de recurso - assembly referenciadoResource file - referenced assembly Uri uri = new Uri("/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Relative);
Arquivo de recurso em subpasta - assembly referenciadoResource file in subfolder - referenced assembly Uri uri = new Uri("/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Relative);
Arquivo de conteúdoContent file Uri uri = new Uri("/ContentFile.xaml", UriKind.Relative);
Arquivo de conteúdo em subpastaContent file in subfolder Uri uri = new Uri("/Subfolder/ContentFile.xaml", UriKind.Relative);

Cenários comuns de URI de pacoteCommon Pack URI Scenarios

As seções anteriores discutimos como construir pacote URIsURIs para identificar recursos, o conteúdo e o local dos arquivos de origem.The preceding sections have discussed how to construct pack URIsURIs to identify resource, content, and site of origin files. Em WPFWPF, essas construções são usadas em uma variedade de formas e as seções a seguir abrangem vários usos comuns.In WPFWPF, these constructions are used in a variety of ways, and the following sections cover several common usages.

Especificando a interface do usuário para mostrar quando um aplicativo foi iniciadoSpecifying the UI to Show When an Application Starts

StartupUri Especifica o primeiro Interface de UsuárioUI para mostrar quando um WPFWPF aplicativo é iniciado.StartupUri specifies the first Interface de UsuárioUI to show when a WPFWPF application is launched. Para aplicativos autônomos, o Interface de UsuárioUI pode ser uma janela, conforme mostrado no exemplo a seguir.For standalone applications, the Interface de UsuárioUI can be a window, as shown in the following example.

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

Aplicativos autônomos e XBAPs (aplicativos de navegador XAML)XAML browser applications (XBAPs) também pode especificar uma página como a interface do usuário inicial, conforme mostrado no exemplo a seguir.Standalone applications and XBAPs (aplicativos de navegador XAML)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" />

Se o aplicativo é um aplicativo autônomo e uma página é especificada com StartupUri, WPFWPF abre um NavigationWindow para hospedar a página.If the application is a standalone application and a page is specified with StartupUri, WPFWPF opens a NavigationWindow to host the page. Para XBAPsXBAPs, a página é exibida no navegador host.For XBAPsXBAPs, the page is shown in the host browser.

O exemplo a seguir mostra como navegar até uma página.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>

Para obter mais informações sobre as várias maneiras de navegar no WPFWPF, consulte visão geral de navegação.For more information on the various ways to navigate in WPFWPF, see Navigation Overview.

Especificando um ícone de janelaSpecifying a Window Icon

O exemplo a seguir mostra como usar um URI para especificar um ícone de janela.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>

Para obter mais informações, consulte Icon.For more information, see Icon.

Carregando arquivos de imagem, áudio e vídeoLoading Image, Audio, and Video Files

WPFWPF permite que os aplicativos usar uma ampla variedade de tipos de mídia, que podem ser identificados e carregados com o pacote URIsURIs, conforme mostrado nos exemplos a seguir. allows applications to use a wide variety of media types, all of which can be identified and loaded with pack URIsURIs, 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" />

Para obter mais informações sobre como trabalhar com conteúdo de mídia, consulte elementos gráficos e multimídia.For more information on working with media content, see Graphics and Multimedia.

Carregando um dicionário de recursos a partir do site de origemLoading a Resource Dictionary from the Site of Origin

Dicionários de recurso (ResourceDictionary) pode ser usado para dar suporte a temas de aplicativo.Resource dictionaries (ResourceDictionary) can be used to support application themes. Uma maneira de criar e gerenciar temas é criando diferentes temas como dicionários de recursos localizados em um site de origem do aplicativo.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. Isso permite que temas sejam adicionados e atualizados sem recompilar e reimplantar um aplicativo.This allows themes to be added and updated without recompiling and redeploying an application. Estes dicionários de recurso podem ser identificados e carregados usando URIsURIs, que é mostrado no exemplo a seguir.These resource dictionaries can be identified and loaded using pack URIsURIs, 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>

Para obter uma visão geral de temas WPFWPF, consulte estilos e modelagem.For an overview of themes in WPFWPF, see Styling and Templating.

Consulte tambémSee Also

Arquivos de recurso, conteúdo e dados de aplicativo do WPFWPF Application Resource, Content, and Data Files