Empaquetar URI en WPFPack URIs in WPF

En Windows Presentation Foundation (WPF), los identificadores uniformes de recursos (URI) se usan para identificar y cargar archivos de muchas maneras, entre las que se incluyen las siguientes:In Windows Presentation Foundation (WPF), uniform resource identifiers (URIs) are used to identify and load files in many ways, including the following:

  • Especificar el interfaz de usuario (UI)user interface (UI) que se va a mostrar cuando se inicia una aplicación por primera vez.Specifying the interfaz de usuario (UI)user interface (UI) to show when an application first starts.

  • Cargando imágenes.Loading images.

  • Navegando a páginas.Navigating to pages.

  • Cargando archivos de datos no ejecutables.Loading non-executable data files.

Además, los URI se pueden usar para identificar y cargar archivos desde varias ubicaciones, incluidas las siguientes:Furthermore, URIs can be used to identify and load files from a variety of locations, including the following:

  • Ensamblado actual.The current assembly.

  • El ensamblado al que se hace referencia.A referenced assembly.

  • Una ubicación relativa a un ensamblado.A location relative to an assembly.

  • El sitio de origen de la aplicación.The application's site of origin.

Para proporcionar un mecanismo coherente para identificar y cargar estos tipos de archivos desde estas ubicaciones, WPFWPF aprovecha la extensibilidad del esquema de pack uri.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. En este tema se proporciona información general sobre el esquema, se explica cómo construir identificadores URI para una variedad de escenarios, se explican los URI absolutos y relativos y la resolución de identificadores URI, antes de mostrar cómo usar los URI del paquete de marcado y código.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.

Esquema de Pack URIThe Pack URI Scheme

El esquema de Pack URI se usa en la especificación de convenciones de empaquetado abierto (OPC), que describe un modelo para organizar e identificar el contenido.The pack URI scheme is used by the Open Packaging Conventions (OPC) specification, which describes a model for organizing and identifying content. Los elementos clave de este modelo son paquetes y partes, donde un paquete es un contenedor lógico para una o más 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. La figura siguiente ilustra este concepto.The following figure illustrates this concept.

Diagrama de paquete y partes

Para identificar elementos, la especificación de OPC aprovecha la extensibilidad de RFC 2396 (identificadores uniformes de recursos (URI): Sintaxis genérica) para definir el esquema de Pack 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.

El esquema especificado por un URI se define mediante su prefijo; http, FTP y file son ejemplos conocidos.The scheme that is specified by a URI is defined by its prefix; http, ftp, and file are well-known examples. El esquema de Pack URI usa "Pack" como su esquema y contiene dos componentes: autoridad y ruta de acceso.The pack URI scheme uses "pack" as its scheme, and contains two components: authority and path. A continuación se da el formato de un Pack URI.The following is the format for a pack URI.

ruta de / de laautoridad Pack://pack://authority/path

La autoridad especifica el tipo de paquete que contiene una parte, mientras que la ruta de acceso especifica la ubicación de un elemento dentro de un paquete.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.

Este concepto se muestra en la ilustración siguiente:This concept is illustrated by the following figure:

Relación entre paquete, autoridad y ruta de acceso

Los paquetes y los elementos son análogos a las aplicaciones y los archivos, donde una aplicación (paquete) puede incluir uno o más archivos (elementos), como los siguientes:Packages and parts are analogous to applications and files, where an application (package) can include one or more files (parts), including:

  • Archivos de recursos que se compilan en el ensamblado local.Resource files that are compiled into the local assembly.

  • Archivos de recursos que se compilan en un ensamblado al que se hace referencia.Resource files that are compiled into a referenced assembly.

  • Archivos de recursos que se compilan en un ensamblado que hace referencia.Resource files that are compiled into a referencing assembly.

  • Archivos de contenido.Content files.

  • Archivos de sitio de origen.Site of origin files.

Para tener acceso a estos tipos de archivos, WPFWPF admite dos entidades: application:///y siteoforigin:///.To access these types of files, WPFWPF supports two authorities: application:/// and siteoforigin:///. La autoridad application:/// identifica los archivos de datos de aplicación que se conocen en tiempo de compilación, incluidos los archivos de recursos y de contenido.The application:/// authority identifies application data files that are known at compile time, including resource and content files. La autoridad siteoforigin:/// identifica los archivos de sitio de origen.The siteoforigin:/// authority identifies site of origin files. El ámbito de cada autoridad se muestra en la figura siguiente.The scope of each authority is shown in the following figure.

Diagrama de URI de paquete

Nota

El componente de autoridad de un Pack URI es un identificador URI incrustado que apunta a un paquete y debe ajustarse a RFC 2396.The authority component of a pack URI is an embedded URI that points to a package and must conform to RFC 2396. Además, el carácter "/" se debe reemplazar por el carácter ",", y los caracteres reservados "%" y "?" deben incluirse en secuencias de escape.Additionally, the "/" character must be replaced with the "," character, and reserved characters such as "%" and "?" must be escaped. Consulte la especificación de OPC para detalles.See the OPC for details.

En las secciones siguientes se explica cómo construir Pack URI con estas dos autoridades junto con las rutas de acceso adecuadas para identificar los archivos de recursos, contenido y sitio de origen.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.

Pack URI de archivos de recursosResource File Pack URIs

Los archivos de recursos se configuran como elementos de Resource de MSBuild y se compilan en ensamblados.Resource files are configured as MSBuild Resource items and are compiled into assemblies. WPF admite la construcción de Pack URI que se pueden usar para identificar los archivos de recursos compilados en el ensamblado local o compilados en un ensamblado al que se hace referencia desde el ensamblado 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.

Archivo de recursos del ensamblado localLocal Assembly Resource File

El Pack URI de un archivo de recursos que se compila en el ensamblado local usa la siguiente autoridad y ruta de acceso:The pack URI for a resource file that is compiled into the local assembly uses the following authority and path:

  • Autoridad: application:///.Authority: application:///.

  • Ruta de acceso: nombre del archivo de recursos, incluida su ruta de acceso relativa a la carpeta raíz del proyecto de ensamblado local.Path: The name of the resource file, including its path, relative to the local assembly project folder root.

En el ejemplo siguiente se muestra el Pack URI de un archivo de recursos de XAMLXAML que se encuentra en la raíz de la carpeta del proyecto del ensamblado local.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

En el ejemplo siguiente se muestra el Pack URI de un archivo de recursos XAMLXAML que se encuentra en una subcarpeta de la carpeta del proyecto del ensamblado local.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

Archivo de recursos del ensamblado al que se hace referenciaReferenced Assembly Resource File

El Pack URI de un archivo de recursos que se compila en un ensamblado al que se hace referencia usa la siguiente autoridad y ruta de acceso:The pack URI for a resource file that is compiled into a referenced assembly uses the following authority and path:

  • Autoridad: application:///.Authority: application:///.

  • Ruta de acceso: nombre de un archivo de recursos que se compila en un ensamblado al que se hace referencia.Path: The name of a resource file that is compiled into a referenced assembly. La ruta de acceso debe tener el formato siguiente:The path must conform to the following format:

    AssemblyShortName{ ; Versión] { ; PublicKey]; componente/ruta de accesoAssemblyShortName{;Version]{;PublicKey];component/Path

    • AssemblyShortName: nombre corto del ensamblado al que se hace referencia.AssemblyShortName: the short name for the referenced assembly.

    • ;Version [opcional]: versión del ensamblado al que se hace referencia y que contiene el archivo de recursos.;Version [optional]: the version of the referenced assembly that contains the resource file. Se usa cuando hay cargados dos o más ensamblados a los que se hace referencia con el mismo nombre corto.This is used when two or more referenced assemblies with the same short name are loaded.

    • ;PublicKey [opcional]: clave pública que se usó para firmar el ensamblado al que se hace referencia.;PublicKey [optional]: the public key that was used to sign the referenced assembly. Se usa cuando hay cargados dos o más ensamblados a los que se hace referencia con el mismo nombre corto.This is used when two or more referenced assemblies with the same short name are loaded.

    • ;component: especifica que la referencia al ensamblado se hace desde el ensamblado local.;component: specifies that the assembly being referred to is referenced from the local assembly.

    • /Path: nombre del archivo de recursos, incluida su ruta de acceso relativa a la raíz de la carpeta del proyecto del ensamblado al que se hace referencia./Path: the name of the resource file, including its path, relative to the root of the referenced assembly's project folder.

En el ejemplo siguiente se muestra el Pack URI de un archivo de recursos XAMLXAML que se encuentra en la raíz de la carpeta del proyecto del ensamblado al que se hace referencia.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

En el ejemplo siguiente se muestra el Pack URI de un archivo de recursos XAMLXAML que se encuentra en una subcarpeta de la carpeta del proyecto del ensamblado al que se hace referencia.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

En el ejemplo siguiente se muestra el Pack URI de un archivo de recursos XAMLXAML que se encuentra en la carpeta raíz de una carpeta de proyecto de un ensamblado específico de la versión a la que se hace referencia.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

Tenga en cuenta que la sintaxis de Pack URI para los archivos de recursos de ensamblado a los que se hace referencia solo se puede usar con la autoridad application:///.Note that the pack URI syntax for referenced assembly resource files can be used only with the application:/// authority. Por ejemplo, no se admite lo siguiente en WPFWPF.For example, the following is not supported in WPFWPF.

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

Pack URI de archivos de contenidoContent File Pack URIs

El URI del paquete para un archivo de contenido usa la siguiente autoridad y ruta de acceso:The pack URI for a content file uses the following authority and path:

  • Autoridad: application:///.Authority: application:///.

  • Ruta de acceso: nombre del archivo de contenido, incluida su ruta de acceso relativa a la ubicación del sistema de archivos del ensamblado ejecutable principal de la aplicación.Path: The name of the content file, including its path relative to the file system location of the application's main executable assembly.

En el ejemplo siguiente se muestra el Pack URI de un archivo de contenido de XAMLXAML, que se encuentra en la misma carpeta que el ensamblado ejecutable.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

En el ejemplo siguiente se muestra el Pack URI de un archivo de contenido de XAMLXAML, que se encuentra en una subcarpeta relativa al ensamblado ejecutable de la aplicación.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

Nota

No se puede navegar por los archivos de contenido HTML.HTML content files cannot be navigated to. El esquema de URI solo admite la navegación a los archivos HTML que se encuentran en el sitio de origen.The URI scheme only supports navigation to HTML files that are located at the site of origin.

Pack URI de sitio de origenSite of Origin Pack URIs

El URI del paquete para un archivo de sitio de origen usa la siguiente autoridad y ruta de acceso:The pack URI for a site of origin file uses the following authority and path:

  • Autoridad: siteoforigin:///.Authority: siteoforigin:///.

  • Ruta de acceso: nombre del archivo de sitio de origen, incluida su ruta de acceso relativa a la ubicación desde donde se inició el ensamblado ejecutable.Path: The name of the site of origin file, including its path relative to the location from which the executable assembly was launched.

En el ejemplo siguiente se muestra el Pack URI para un XAMLXAML archivo de sitio de origen, almacenado en la ubicación desde la que se inicia el ensamblado ejecutable.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

En el ejemplo siguiente se muestra el Pack URI para un XAMLXAML archivo de sitio de origen, almacenado en una subcarpeta relativa a la ubicación desde la que se inicia el ensamblado ejecutable de la aplicación.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

Archivos de paginaciónPage Files

Los archivos XAML que se configuran como MSBuild Page elementos se compilan en ensamblados de la misma manera que los archivos de recursos.XAML files that are configured as MSBuild Page items are compiled into assemblies in the same way as resource files. Por consiguiente, los elementos de Page de MSBuild se pueden identificar mediante pack uri para los archivos de recursos.Consequently, MSBuild Page items can be identified using pack URIs for resource files.

Los tipos de XAMLXAML archivos que se configuran normalmente como elementos Page de MSBuild tienen uno de los elementos siguientes como su elemento raíz:The types of XAMLXAML files that are commonly configured as MSBuildPage items have one of the following as their root element:

URI absolutos frente a packs relativosAbsolute vs. Relative Pack URIs

Un URI de paquete completo incluye el esquema, la autoridad y la ruta de acceso, y se considera un URI de paquete absoluto.A fully qualified pack URI includes the scheme, the authority, and the path, and it is considered an absolute pack URI. Como simplificación de los desarrolladores, los elementos XAMLXAML normalmente permiten establecer los atributos adecuados con un URI de paquete relativo, que incluye solo la ruta de acceso.As a simplification for developers, XAMLXAML elements typically allow you to set appropriate attributes with a relative pack URI, which includes only the path.

Por ejemplo, considere el siguiente Pack URI absoluto para un archivo de recursos en el ensamblado local.For example, consider the following absolute pack URI for a resource file in the local assembly.

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

El URI del Pack relativo que hace referencia a este archivo de recursos sería el siguiente.The relative pack URI that refers to this resource file would be the following.

/ResourceFile.xaml

Nota

Dado que los archivos de sitio de origen no están asociados a los ensamblados, solo se puede hacer referencia a ellos con identificadores URI absolutos.Because site of origin files are not associated with assemblies, they can only be referred to with absolute pack URIs.

De forma predeterminada, un URI de Pack relativo se considera relativo a la ubicación del marcado o código que contiene la referencia.By default, a relative pack URI is considered relative to the location of the markup or code that contains the reference. Sin embargo, si se usa una barra diagonal inversa inicial, la referencia del URI del Pack relativo se considera relativa a la raíz de la aplicación.If a leading backslash is used, however, the relative pack URI reference is then considered relative to the root of the application. Por ejemplo, considere la estructura de proyecto siguiente.For example, consider the following project structure.

App.xaml

Page2.xaml

\SubFolder

+ Page1.xaml

+ Page2.xaml

Si página1. XAML contiene un URI que hace referencia a \SubFolder\Page2.XAML raíz, la referencia puede usar el siguiente URI de módulo relativo.If Page1.xaml contains a URI that references Root\SubFolder\Page2.xaml, the reference can use the following relative pack URI.

Page2.xaml

Si página1. XAML contiene un URI que hace referencia a \Page2.XAML raíz, la referencia puede usar el siguiente URI de módulo relativo.If Page1.xaml contains a URI that references Root\Page2.xaml, the reference can use the following relative pack URI.

/Page2.xaml

Resolución de Pack URIPack URI Resolution

El formato de los identificadores URI permite que los Pack URI de los distintos tipos de archivos tengan el mismo aspecto.The format of pack URIs makes it possible for pack URIs for different types of files to look the same. Por ejemplo, considere el siguiente Pack URI absoluto.For example, consider the following absolute pack URI.

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

Este URI de paquete absoluto podría hacer referencia a un archivo de recursos en el ensamblado local o en un archivo de contenido.This absolute pack URI could refer to either a resource file in the local assembly or a content file. Lo mismo se cumple para el URI relativo siguiente.The same is true for the following relative URI.

/ResourceOrContentFile.xaml

Con el fin de determinar el tipo de archivo al que hace referencia un Pack URI, WPFWPF resuelve los URI para los archivos de recursos en los ensamblados y archivos de contenido locales mediante el uso de la heurística siguiente:In order to determine the type of file that a pack URI refers to, WPFWPF resolves URIs for resource files in local assemblies and content files by using the following heuristics:

  1. Sondear los metadatos de ensamblado para un atributo de AssemblyAssociatedContentFileAttribute que coincida con el URI del paquete.Probe the assembly metadata for an AssemblyAssociatedContentFileAttribute attribute that matches the pack URI.

  2. Si se encuentra el atributo AssemblyAssociatedContentFileAttribute, la ruta de acceso del Pack URI hace referencia a un archivo de contenido.If the AssemblyAssociatedContentFileAttribute attribute is found, the path of the pack URI refers to a content file.

  3. Si no se encuentra el atributo AssemblyAssociatedContentFileAttribute, sondee los archivos de recursos de conjunto que se compilan en el ensamblado local.If the AssemblyAssociatedContentFileAttribute attribute is not found, probe the set resource files that are compiled into the local assembly.

  4. Si se encuentra un archivo de recursos que coincide con la ruta de acceso del Pack URI, la ruta de acceso del Pack URI hace referencia a un archivo de recursos.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. Si no se encuentra el recurso, el Uri creado internamente no es válido.If the resource is not found, the internally created Uri is invalid.

La resolución de URI no se aplica a los URI que hacen referencia a lo siguiente:URI resolution does not apply for URIs that refer to the following:

  • Archivos de contenido en ensamblados a los que se hace referencia: los WPFWPF no admiten estos tipos de archivo.Content files in referenced assemblies: these file types are not supported by WPFWPF.

  • Archivos incrustados en ensamblados a los que se hace referencia: los URI que los identifican son únicos porque incluyen el nombre del ensamblado al que se hace referencia y el sufijo ;component.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.

  • Archivos de sitio de origen: los URI que los identifican son únicos porque son los únicos archivos que se pueden identificar mediante Pack URI que contienen la autoridad siteoforigin:///.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.

Una simplificación que la resolución de URI de paquete permite es que el código sea algo independiente de las ubicaciones de los archivos de recursos y de contenido.One simplification that pack URI resolution allows is for code to be somewhat independent of the locations of resource and content files. Por ejemplo, si tiene un archivo de recursos en el ensamblado local que se reconfigura para que sea un archivo de contenido, el URI del paquete del recurso sigue siendo el mismo, al igual que el código que usa el URI del paquete.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.

Programación con Pack URIProgramming with Pack URIs

Muchas clases de WPFWPF implementan propiedades que se pueden establecer con pack uri, entre los que se incluyen:Many WPFWPF classes implement properties that can be set with pack URIs, including:

Estas propiedades se pueden establecer tanto desde el marcado como desde el código.These properties can be set from both markup and code. En esta sección se muestran las construcciones básicas para ambos y, luego, se muestran ejemplos de escenarios comunes.This section demonstrates the basic constructions for both and then shows examples of common scenarios.

Uso de los Pack URI en el marcadoUsing Pack URIs in Markup

Un Pack URI se especifica en el marcado estableciendo el elemento de un atributo con el Pack URI.A pack URI is specified in markup by setting the element of an attribute with the pack URI. Por ejemplo:For example:

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

En la tabla 1 se muestran los distintos identificadores URI absolutos que puede especificar en el marcado.Table 1 illustrates the various absolute pack URIs that you can specify in markup.

Tabla 1: Pack URI absolutos en el marcadoTable 1: Absolute Pack URIs in Markup

ArchivoFile URI de paquete absolutoAbsolute pack URI
Archivo de recursos: ensamblado localResource file - local assembly "pack://application:,,,/ResourceFile.xaml"
Archivo de recursos en subcarpeta: ensamblado localResource file in subfolder - local assembly "pack://application:,,,/Subfolder/ResourceFile.xaml"
Archivo de recursos: ensamblado al que se hace referenciaResource file - referenced assembly "pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml"
Archivo de recursos en subcarpeta del ensamblado al que se hace referenciaResource file in subfolder of referenced assembly "pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml"
Archivo de recursos en el ensamblado al que se hace referencia con versionesResource file in versioned referenced assembly "pack://application:,,,/ReferencedAssembly;v1.0.0.0;component/ResourceFile.xaml"
Archivo de contenidoContent file "pack://application:,,,/ContentFile.xaml"
Archivo de contenido en subcarpetaContent file in subfolder "pack://application:,,,/Subfolder/ContentFile.xaml"
Archivo de sitio de origenSite of origin file "pack://siteoforigin:,,,/SOOFile.xaml"
Archivo de sitio de origen en subcarpetaSite of origin file in subfolder "pack://siteoforigin:,,,/Subfolder/SOOFile.xaml"

En la tabla 2 se muestran los diversos identificadores URI relativos que se pueden especificar en el marcado.Table 2 illustrates the various relative pack URIs that you can specify in markup.

Tabla 2: Pack URI relativos en el marcadoTable 2: Relative Pack URIs in Markup

ArchivoFile URI de paquete relativoRelative pack URI
Archivo de recursos en el ensamblado localResource file in local assembly "/ResourceFile.xaml"
Archivo de recursos en subcarpeta del ensamblado localResource file in subfolder of local assembly "/Subfolder/ResourceFile.xaml"
Archivo de recursos en el ensamblado al que se hace referenciaResource file in referenced assembly "/ReferencedAssembly;component/ResourceFile.xaml"
Archivo de recursos en subcarpeta del ensamblado al que se hace referenciaResource file in subfolder of referenced assembly "/ReferencedAssembly;component/Subfolder/ResourceFile.xaml"
Archivo de contenidoContent file "/ContentFile.xaml"
Archivo de contenido en subcarpetaContent file in subfolder "/Subfolder/ContentFile.xaml"

Uso de los Pack URI en el códigoUsing Pack URIs in Code

Para especificar un Pack URI en el código, cree una instancia de la clase Uri y pase el URI del paquete como parámetro al constructor.You specify a pack URI in code by instantiating the Uri class and passing the pack URI as a parameter to the constructor. Esto último se muestra en el ejemplo siguiente.This is demonstrated in the following example.

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

De forma predeterminada, la clase Uri considera que los URI Pack son absolutos.By default, the Uri class considers pack URIs to be absolute. Por consiguiente, se produce una excepción cuando se crea una instancia de la clase Uri con un Pack URI relativo.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");

Afortunadamente, la sobrecarga Uri(String, UriKind) del constructor de clase Uri acepta un parámetro de tipo UriKind para permitirle especificar si un Pack URI es absoluto o 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 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);

Solo debe especificar Absolute o Relative cuando esté seguro de que el URI del paquete proporcionado es uno o el otro.You should specify only Absolute or Relative when you are certain that the provided pack URI is one or the other. Si no conoce el tipo de Pack URI que se usa, por ejemplo, cuando un usuario escribe un Pack URI en tiempo de ejecución, use RelativeOrAbsolute en su lugar.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);

En la tabla 3 se muestran los diversos Pack URI relativos que se pueden especificar en el código mediante System.Uri.Table 3 illustrates the various relative pack URIs that you can specify in code by using System.Uri.

Tabla 3: Pack URI absolutos en el códigoTable 3: Absolute Pack URIs in Code

ArchivoFile URI de paquete absolutoAbsolute pack URI
Archivo de recursos: ensamblado localResource file - local assembly Uri uri = new Uri("pack://application:,,,/ResourceFile.xaml", UriKind.Absolute);
Archivo de recursos en subcarpeta: ensamblado localResource file in subfolder - local assembly Uri uri = new Uri("pack://application:,,,/Subfolder/ResourceFile.xaml", UriKind.Absolute);
Archivo de recursos: ensamblado al que se hace referenciaResource file - referenced assembly Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Absolute);
Archivo de recursos en subcarpeta del ensamblado al que se hace referenciaResource file in subfolder of referenced assembly Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Absolute);
Archivo de recursos en el ensamblado al que se hace referencia con versionesResource file in versioned referenced assembly Uri uri = new Uri("pack://application:,,,/ReferencedAssembly;v1.0.0.0;component/ResourceFile.xaml", UriKind.Absolute);
Archivo de contenidoContent file Uri uri = new Uri("pack://application:,,,/ContentFile.xaml", UriKind.Absolute);
Archivo de contenido en subcarpetaContent file in subfolder Uri uri = new Uri("pack://application:,,,/Subfolder/ContentFile.xaml", UriKind.Absolute);
Archivo de sitio de origenSite of origin file Uri uri = new Uri("pack://siteoforigin:,,,/SOOFile.xaml", UriKind.Absolute);
Archivo de sitio de origen en subcarpetaSite of origin file in subfolder Uri uri = new Uri("pack://siteoforigin:,,,/Subfolder/SOOFile.xaml", UriKind.Absolute);

En la tabla 4 se muestran los diversos Pack URI relativos que se pueden especificar en el código mediante System.Uri.Table 4 illustrates the various relative pack URIs that you can specify in code using System.Uri.

Tabla 4: Pack URI relativos en el códigoTable 4: Relative Pack URIs in Code

ArchivoFile URI de paquete relativoRelative pack URI
Archivo de recursos: ensamblado localResource file - local assembly Uri uri = new Uri("/ResourceFile.xaml", UriKind.Relative);
Archivo de recursos en subcarpeta: ensamblado localResource file in subfolder - local assembly Uri uri = new Uri("/Subfolder/ResourceFile.xaml", UriKind.Relative);
Archivo de recursos: ensamblado al que se hace referenciaResource file - referenced assembly Uri uri = new Uri("/ReferencedAssembly;component/ResourceFile.xaml", UriKind.Relative);
Archivo de recursos en subcarpeta: ensamblado al que se hace referenciaResource file in subfolder - referenced assembly Uri uri = new Uri("/ReferencedAssembly;component/Subfolder/ResourceFile.xaml", UriKind.Relative);
Archivo de contenidoContent file Uri uri = new Uri("/ContentFile.xaml", UriKind.Relative);
Archivo de contenido en subcarpetaContent file in subfolder Uri uri = new Uri("/Subfolder/ContentFile.xaml", UriKind.Relative);

Escenarios comunes de Pack URICommon Pack URI Scenarios

En las secciones anteriores se ha explicado cómo construir pack uri para identificar los archivos de recursos, contenido y sitio de origen.The preceding sections have discussed how to construct pack URIs to identify resource, content, and site of origin files. En WPFWPF, estas construcciones se utilizan de varias maneras, y las secciones siguientes cubren varios usos comunes.In WPFWPF, these constructions are used in a variety of ways, and the following sections cover several common usages.

Especificación de la UI que se va a mostrar cuando una aplicación se inicia por primera vezSpecifying the UI to Show When an Application Starts

StartupUri especifica el primer IUUI que se va a mostrar cuando se inicia una aplicación WPFWPF.StartupUri specifies the first IUUI to show when a WPFWPF application is launched. En el caso de las aplicaciones independientes, el IUUI puede ser una ventana, tal como se muestra en el ejemplo siguiente.For standalone applications, the IUUI can be a window, as shown in the following example.

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

Las aplicaciones y Aplicaciones del explorador XAML (XBAPs)XAML browser applications (XBAPs) independientes también pueden especificar una página como la interfaz de usuario inicial, como se muestra en el ejemplo siguiente.Standalone applications and Aplicaciones del explorador XAML (XBAPs)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" />

Si la aplicación es una aplicación independiente y se especifica una página con StartupUri, WPFWPF abre un NavigationWindow para hospedar la página.If the application is a standalone application and a page is specified with StartupUri, WPFWPF opens a NavigationWindow to host the page. Por XBAPsXBAPs, la página se muestra en el explorador del host.For XBAPsXBAPs, the page is shown in the host browser.

En el ejemplo siguiente se muestra cómo navegar a una 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 obtener más información sobre las distintas maneras de navegar en WPFWPF, consulte información general sobre navegación.For more information on the various ways to navigate in WPFWPF, see Navigation Overview.

Especificación de un icono de ventanaSpecifying a Window Icon

En el ejemplo siguiente se muestra cómo usar un identificador URI para especificar el icono de una ventana.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 obtener más información, vea Icon.For more information, see Icon.

Carga de archivos de imagen, audio y vídeoLoading Image, Audio, and Video Files

WPFWPF permite a las aplicaciones usar una amplia variedad de tipos de medios, todos ellos se pueden identificar y cargar con pack uri, como se muestra en los ejemplos siguientes.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" />

Para obtener más información sobre cómo trabajar con contenido multimedia, vea gráficos y multimedia.For more information on working with media content, see Graphics and Multimedia.

Carga de un diccionario de recursos desde el sitio de origenLoading a Resource Dictionary from the Site of Origin

Los diccionarios de recursos (ResourceDictionary) se pueden usar para admitir los temas de la aplicación.Resource dictionaries (ResourceDictionary) can be used to support application themes. Una forma de crear y administrar temas consiste en crear varios temas como diccionarios de recursos que están ubicados en el sitio de origen de una aplicación.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. Esto permite agregar temas y actualizarlos sin tener que volver a compilar e implementar una aplicación.This allows themes to be added and updated without recompiling and redeploying an application. Estos diccionarios de recursos se pueden identificar y cargar mediante pack uri, que se muestra en el ejemplo siguiente.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>

Para obtener información general sobre los temas de WPFWPF, consulte aplicar estilos y plantillas.For an overview of themes in WPFWPF, see Styling and Templating.

Vea tambiénSee also