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

No Windows Presentation Foundation (WPF), URIs (uniform resource identifiers)uniform resource identifiers (URIs) o é usado 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) a ser mostrado 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 , o 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 desses locais, WPFWPF o aproveita 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 construir o pacote URIsURIs para uma variedade de cenários, discute absoluto e relativo URIsURIs e URIURI resolução, antes de mostrar como usar o pacote URIsURIs de ambas as marcações 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 esquema URIURI de pacote é usado pela especificação OPC ( Open Packaging Conventions ), 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 parteslógicas.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 partes e pacote

Para identificar partes, a especificação OPC aproveita a extensibilidade do RFC 2396 (Uniform Resource Identifiers (URI): Sintaxe genérica) para definir o esquema URIURI de pacote.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 arquivo 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 esquema URIURI de pacote usa "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. A seguir está o formato de um pacote URIURI.The following is the format for a pack URIURI.

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

A autoridade especifica o tipo de pacote no qual uma parte está contida, 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 caminho

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 o dá suporte a 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 pacote

Observação

O componente de autoridade de um URIURI pacote é um URIURI inserido que aponta para um pacote e deve estar em conformidade com o 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 construir URIsURIs o pacote usando essas duas autoridades em conjunto com os caminhos apropriados para identificar recursos, conteúdo e site de 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

Os arquivos de recurso são configurados como itens do MSBuild Resource e são compilados em assemblies.Resource files are configured as MSBuild Resource items and are compiled into assemblies. O WPF dá suporte à construção de URIs de pacote que podem ser usados para identificar arquivos de recursos que são compilados no assembly local ou compilados em um assembly que é referenciado do assembly local.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.

Arquivo de recurso de assembly localLocal Assembly Resource File

O pacote URIURI para um arquivo de recurso 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, relativo à raiz da pasta do 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 URIURI pacote para XAMLXAML um arquivo de recurso que está localizado na raiz da pasta do 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 URIURI pacote para XAMLXAML um arquivo de recurso que está localizado em uma subpasta da pasta do 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 URIURI para um arquivo de recurso que é compilado em um assembly referenciado usa 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 que é 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{ ;Version]{ ;PublicKey];component/PathAssemblyShortName{;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 URIURI pacote para XAMLXAML um arquivo de recurso que está localizado na raiz da pasta do 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 URIURI pacote para XAMLXAML um arquivo de recurso que está localizado em uma subpasta da pasta do 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 URIURI pacote para XAMLXAML um arquivo de recurso que está localizado na pasta raiz de uma pasta de projeto de assembly específica de versão referenciada.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 a sintaxe URIURI do pacote para arquivos de recurso de assembly referenciados pode ser usada somente com a autoridade Application:///.Note that the pack URIURI syntax for referenced assembly resource files can be used only with the application:/// authority. Por exemplo, não há suporte para o seguinte WPFWPFno.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 URIURI para um arquivo de conteúdo usa a seguinte 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 seu caminho relativo ao local do sistema de arquivos do assembly executável principal 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 URIURI pacote para XAMLXAML um arquivo de conteúdo, localizado na mesma pasta que o 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 URIURI pacote para XAMLXAML um arquivo de conteúdo, localizado em uma subpasta que é relativa 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 navegar para arquivos de conteúdo HTML.HTML content files cannot be navigated to. O URIURI esquema dá suporte apenas à navegação para arquivos HTML que estão localizados no site de origem.The URIURI scheme only supports navigation to HTML files that are located at the site of origin.

URIs de pacote de site de origemSite of Origin Pack URIs

O pacote URIURI para um arquivo de site de origem 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 seu caminho relativo ao local 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 URIURI pacote para XAMLXAML um arquivo de site de origem, armazenado no local do qual o assembly executável é iniciado.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 URIURI pacote para XAMLXAML um arquivo de site de origem, armazenado na subpasta que é relativa ao local do qual 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

Os arquivos XAML que são configurados como itens do MSBuild Page são compilados em assemblies da mesma maneira que os arquivos de recursos.XAML files that are configured as MSBuild Page items are compiled into assemblies in the same way as resource files. Consequentemente, Page os itens do MSBuild podem ser identificados usando URIs de pacote para arquivos de recurso.Consequently, MSBuild Page items can be identified using pack URIs for resource files.

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

Absoluto versus URIs de pacote relativasAbsolute vs. Relative Pack URIs

Um pacote URIURI totalmente qualificado inclui o esquema, a autoridade e o caminho, e é considerado um pacote URIURIabsoluto.A fully qualified pack URIURI includes the scheme, the authority, and the path, and it is considered an absolute pack URIURI. Como uma simplificação para os XAMLXAML desenvolvedores, os elementos normalmente permitem que você defina atributos apropriados com URIURIum pacote relativo, 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 URIURI absoluto 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 URIURI relativo que se refere a esse arquivo de recurso seria o seguinte.The relative pack URIURI that refers to this resource file would be the following.

/ResourceFile.xaml

Observação

Como os arquivos de site de origem não estão associados a assemblies, eles só podem ser referenciados com URIsURIso pacote absoluto.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 URIURI relativo é 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. No entanto, se uma barra invertida à esquerda for usada URIURI , a referência de pacote relativa será considerada relativa à 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 página1. XAML contiver URIURI um que faça referência a \SubFolder\Page2.XAML raiz, a referência poderá usar o URIURIseguinte pacote relativo.If Page1.xaml contains a URIURI that references Root\SubFolder\Page2.xaml, the reference can use the following relative pack URIURI.

Page2.xaml

Se página1. XAML contiver URIURI um que faça referência a \Page2.XAML raiz, a referência poderá usar o URIURIseguinte pacote relativo.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 do pacote URIsURIs torna possível que o pacote URIsURIs para diferentes tipos de arquivos tenha a mesma aparência.The format of pack URIsURIs makes it possible for pack URIsURIs for different types of files to look the same. Por exemplo, considere o seguinte pacote URIURIabsoluto.For example, consider the following absolute pack URIURI.

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

Esse pacote URIURI absoluto 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 o seguinte relativo URIURI.The same is true for the following relative URIURI.

/ResourceOrContentFile.xaml

Para determinar o tipo de arquivo ao qual um pacote URIURI se refere, WPFWPF o resolve URIsURIs os arquivos de recurso em assemblies locais e arquivos de conteúdo usando a seguinte heurística: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. Investigue os metadados do assembly para AssemblyAssociatedContentFileAttribute um atributo que corresponda ao URIURIpacote.Probe the assembly metadata for an AssemblyAssociatedContentFileAttribute attribute that matches the pack URIURI.

  2. Se o AssemblyAssociatedContentFileAttribute atributo for encontrado, o caminho do pacote URIURI fará referência 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, investigue os arquivos de recurso definidos que são 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 URIURI for encontrado, o caminho do pacote URIURI se referirá 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, o criado Uri internamente será inválido.If the resource is not found, the internally created Uri is invalid.

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

  • Arquivos de conteúdo em assemblies referenciados: esses tipos de arquivo não WPFWPFsão suportados pelo.Content files in referenced assemblies: these file types are not supported by WPFWPF.

  • Arquivos inseridos em assemblies referenciados: URIsURIs que os identificam são exclusivos porque 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.

  • Arquivos de site de origem URIsURIs : que os identificam são exclusivos porque são os únicos arquivos que podem ser identificados pelo URIsURIs pacote que contêm a autoridade siteoforigin:///.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.

Uma simplificação que URIURI a resolução de pacote permite é que o código seja, de certa forma, independente dos locais dos arquivos de conteúdo e de 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 que é reconfigurado para ser um arquivo de conteúdo, o pacote URIURI para o recurso permanecerá o mesmo, assim como o código que usa o URIURIpacote.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

Muitas WPFWPF classes implementam propriedades que podem ser definidas com URIsURIso pacote, 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 é especificado na 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" />

A tabela 1 ilustra o vários pacotes URIsURIs absolutos 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 na marcaçãoTable 1: Absolute Pack URIs in Markup

ArquivoFile Pacote absolutoURIURIAbsolute 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"

A tabela 2 ilustra os vários pacotes URIsURIs relativos 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 relativas na marcaçãoTable 2: Relative Pack URIs in Markup

ArquivoFile Pacote relativoURIURIRelative 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

Você especifica um pacote URIURI no código instanciando a Uri classe e passando 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, a Uri classe considera o URIsURIs pacote como absoluto.By default, the Uri class considers pack URIsURIs to be absolute. Consequentemente, uma exceção é gerada quando uma instância da Uri classe é criada com um pacote URIURIrelativo.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, a Uri(String, UriKind) sobrecarga Uri do construtor da classe aceita um parâmetro do tipo UriKind para permitir que você especifique se um pacote URIURI é absoluto ou relativo.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 tiver certeza de que o pacote URIURI fornecido é 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 usado, como quando um usuário insere um pacote 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);

A tabela 3 ilustra os vários pacotes URIsURIs relativos 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 absoluto no códigoTable 3: Absolute Pack URIs in Code

ArquivoFile Pacote absolutoURIURIAbsolute 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);

A tabela 4 ilustra os vários pacotes URIsURIs relativos que você pode especificar no código System.Uriusando.Table 4 illustrates the various relative pack URIsURIs that you can specify in code using System.Uri.

Tabela 4: URIs de pacote relativas no códigoTable 4: Relative Pack URIs in Code

ArquivoFile Pacote relativoURIURIRelative 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 discutiram como construir o Pack URIsURIs para identificar recursos, conteúdo e site de arquivos de origem.The preceding sections have discussed how to construct pack URIsURIs to identify resource, content, and site of origin files. No WPFWPF, essas construções são usadas de várias maneiras, 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

StartupUriEspecifica o primeiro Interface de UsuárioUI a ser mostrado quando WPFWPF um aplicativo é iniciado.StartupUri specifies the first Interface de UsuárioUI to show when a WPFWPF application is launched. Para aplicativos autônomos, Interface de UsuárioUI o 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 XBAPs (aplicativos de navegador XAML)XAML browser applications (XBAPs) e também podem 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 for um aplicativo autônomo e uma página for especificada com StartupUri, WPFWPF o abrirá 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 XBAPsXBAPso, a página é mostrada no navegador de 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 WPFWPFno, 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

WPFWPFpermite que os aplicativos usem uma ampla variedade de tipos de mídia, todos os quais podem ser identificados e carregados URIsURIscom o pacote, 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 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

Os dicionáriosResourceDictionaryde recursos () podem ser usados 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. Esses dicionários de recursos podem ser identificados e carregados URIsURIsusando o pacote, 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 dos WPFWPFtemas no, consulte estilização e modelagem.For an overview of themes in WPFWPF, see Styling and Templating.

Consulte tambémSee also