Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los recursos de Windows Presentation Foundation (WPF) admiten una característica de diccionario de recursos combinado. Esta característica proporciona una manera de definir la parte de recursos de una aplicación WPF fuera de la aplicación XAML compilada. Después, los recursos se pueden compartir entre aplicaciones y también están más convenientemente aislados para la localización.
Creación de un diccionario combinado
En el marcado, se usa la siguiente sintaxis para introducir un diccionario de recursos combinado en una página:
<Page.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="myresourcedictionary.xaml"/>
<ResourceDictionary Source="myresourcedictionary2.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Page.Resources>
El ResourceDictionary elemento no tiene una directiva x:Key, que suele ser necesaria para todos los elementos de una colección de recursos. Pero otra ResourceDictionary referencia dentro de la MergedDictionaries colección es un caso especial, reservado para este escenario de diccionario de recursos combinado. Además, el ResourceDictionary que introduce un diccionario de recursos combinado no puede tener una directiva x:Key.
Normalmente, cada ResourceDictionary dentro de la colección MergedDictionaries especifica un atributo Source. El valor de Source debe ser un identificador uniforme de recursos (URI) que resuelva a la ubicación del archivo de recursos que se va a combinar. El destino de ese URI debe ser otro archivo XAML, con ResourceDictionary como su elemento raíz.
Nota:
Es legal definir recursos dentro de un ResourceDictionary que se especifica como un diccionario combinado, ya sea como alternativa a especificar Source, o además de los recursos que se incluyen desde el origen especificado. Sin embargo, esto no es un escenario común. El escenario principal para los diccionarios combinados es combinar recursos desde ubicaciones de archivos externos. Si desea especificar recursos dentro del marcado de una página, defínalos en el elemento principal ResourceDictionary y no en los diccionarios combinados.
Comportamiento de diccionario fusionado
Los recursos de un diccionario combinado ocupan una ubicación en el ámbito de búsqueda de recursos que se encuentra justo después del ámbito del diccionario de recursos principal en el que se combinan. Aunque una clave de recurso debe ser única dentro de cualquier diccionario individual, una clave puede existir varias veces en un conjunto de diccionarios combinados. En este caso, el recurso que se devuelve procede del último diccionario encontrado secuencialmente en la MergedDictionaries colección. Si la MergedDictionaries colección se definió en XAML, el orden de los diccionarios combinados de la colección es el orden de los elementos tal como se proporciona en el etiquetado. Si se define una clave en el diccionario principal y también en un diccionario que se ha combinado, el recurso que se devuelve procede del diccionario principal. Estas reglas de ámbito se aplican igualmente para las referencias de recursos estáticos y las referencias de recursos dinámicos.
Diccionarios y código combinados
Los diccionarios combinados se pueden agregar a un Resources diccionario mediante código. El valor predeterminado, inicialmente vacío, ResourceDictionary que existe para cualquier propiedad Resources, también tiene una propiedad de colección MergedDictionaries que es predeterminada e inicialmente vacía. Para agregar un diccionario fusionado mediante código, primero se obtiene una referencia al ResourceDictionary principal deseado, luego se determina el valor de su propiedad MergedDictionaries, y finalmente se llama a Add en el objeto genérico Collection contenido en MergedDictionaries. El objeto que agregue debe ser un nuevo ResourceDictionary.
En el código, usted no establece la propiedad Source. En su lugar, debe obtener un ResourceDictionary objeto creando uno o cargando uno. Una manera de cargar un ResourceDictionary existente es llamar a XamlReader.Load en una secuencia de archivos XAML existente que tiene una ResourceDictionary raíz, y luego convertir el valor devuelto en ResourceDictionary.
URI combinadas de diccionario
Hay varias técnicas para incluir un diccionario de recursos combinado, que se indica mediante el formato de identificador uniforme de recursos (URI) que se usa. En términos generales, estas técnicas se pueden dividir en dos categorías: recursos que se compilan como parte del proyecto y recursos que no se compilan como parte del proyecto.
En el caso de los recursos que se compilan como parte del proyecto, puede usar una ruta de acceso relativa que haga referencia a la ubicación del recurso. La ruta de acceso relativa se evalúa durante la compilación. El recurso debe definirse como parte del proyecto como una acción de compilación de recursos. Si incluye un archivo .xaml de recursos en el proyecto como Recurso, no es necesario copiar el archivo de recursos en el directorio de salida, el recurso ya se incluye en la aplicación compilada. También puede usar la acción De compilación de contenido , pero debe copiar los archivos en el directorio de salida e implementar también los archivos de recursos en la misma relación de ruta de acceso con el ejecutable.
Nota:
No utilice la acción de compilación Embedded Resource. La propia acción de compilación es compatible con las aplicaciones WPF, pero la resolución de Source no incorpora ResourceManagery, por tanto, no puede separar el recurso individual de la secuencia. Todavía puede usar el recurso incrustado para otros fines, siempre y cuando también se use ResourceManager para acceder a los recursos.
Una técnica relacionada consiste en usar un URI de paquete en un archivo XAML y hacer referencia a él como Origen. El URI del paquete permite referencias a componentes de ensamblados a los que se hace referencia y otras técnicas. Para obtener más información sobre los URI del paquete, vea Recursos de aplicación de WPF, contenido y archivos de datos.
En el caso de los recursos que no se compilan como parte del proyecto, el URI se evalúa en tiempo de ejecución. Puede usar un transporte de URI común, como el archivo: o http: para hacer referencia al archivo de recursos. La desventaja de usar el enfoque de recursos no compilados es que el acceso a archivos requiere pasos de implementación adicionales y http: el acceso implica la zona de seguridad de Internet.
Reutilización de diccionarios combinados
Puede reutilizar o compartir diccionarios de recursos combinados entre aplicaciones, ya que se puede hacer referencia al diccionario de recursos que se va a combinar a través de cualquier identificador uniforme de recursos (URI) válido. Exactamente cómo lo hace depende de la estrategia de implementación de aplicaciones y del modelo de aplicación que siga. La estrategia de URI de pack mencionada anteriormente proporciona una manera de obtener normalmente un recurso combinado entre varios proyectos durante el desarrollo mediante el uso compartido de una referencia de ensamblado. En este escenario, el cliente sigue distribuyendo los recursos y al menos una de las aplicaciones debe implementar el ensamblado al que se hace referencia. También es posible hacer referencia a recursos combinados a través de un URI distribuido que usa el protocolo http: .
Escribir diccionarios combinados como archivos de aplicación locales o en almacenamiento compartido local es otro posible escenario de implementación de aplicaciones y diccionarios combinados.
Localización
Si los recursos que deben localizarse están aislados dentro de diccionarios que se integran en diccionarios principales y se conservan como XAML independientes, estos archivos se pueden localizar por separado. Esta técnica es una alternativa ligera para localizar los ensamblados de recursos satélite. Para obtener más información, consulte Información general sobre la globalización y la localización de WPF.
Consulte también
.NET Desktop feedback