Featured Posts

Anunciando: Taller de Silverlight 4Anunciando: Taller de Silverlight 4 Antes que otra cosa, quiero agradecer a todos y todas quienes me ayudaron a contestar la encuesta que preparé en días pasados.  Recibí más de 250 respuestas de personas...

Readmore

Silverlight Tour–Guadalajara (08 al 10 de Septiembre... El interés y difusión de Silverlight como plataforma de desarrollo está siendo cada vez más grande y muchas empresas están optando por esta tecnología para construir...

Readmore

Curso gratuito de Introducción a Silverlight 4 – 2da. ParteCurso gratuito de Introducción a Silverlight... Tengo el gusto de informarles que ya está disponible la segunda parte del Curso gratuito de Introducción a Silverlight 4 en Español, el cual ahora consta de un total...

Readmore

Silverlight Tour en Español – Ahora con controles de Telerik!Silverlight Tour en Español – Ahora con... Tengo el gusto de informar que tal como sucede con el Silverlight Tour en USA y Canadá, ahora también el Silverlight Tour en Español en asociación con Telerik incluye...

Readmore

Rodrigo Díaz Concha Rss

Silverlight 3 Beta 1: Diccionarios de Recursos de tipo Merged

Posted on : 09-06-2009 | By : Rodrigo | In : Silverlight, Silverlight 3

5

Introducción

Otra característica nueva en Silverlight 3 Beta 1, tomada de su hermano mayor WPF son los Diccionarios de Recursos de tipo Merged (mezclados, unidos), o en inglés: Merged Resource Dictionaries; los cuales nos permiten tener de manera desacoplada recursos (por ejemplo estilos) en un archivo por separado.  Esto nos ofrece un mecanismo para compartir estilos entre diferentes proyectos de Silverlight, o incluso entre proyectos de Silverlight y proyectos de WPF.

El archivo deberá tener declarado todos y cada uno de los Recursos que deseamos incorporar a ese diccionario, y deberán estar contenidos en un elemento de tipo <ResourceDictionary>.  El siguiente fragmento de código Xaml muestra un archivo llamado Estilos.xaml que funge como Diccionario de Recursos:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >

    <Style x:Name="estiloBase" TargetType="Shape">

        <Setter Property="Width" Value="50" />

        <Setter Property="Height" Value="50" />

        <Setter Property="Fill" Value="Red" />

        <Setter Property="Stroke" Value="Gold" />

        <Setter Property="StrokeThickness" Value="5" />

        <Setter Property="Margin" Value="5" />

    </Style>

    <Style x:Name="estiloRectangulo" BasedOn="{StaticResource estiloBase}" TargetType="Rectangle">

        <Setter Property="RadiusX" Value="10" />

        <Setter Property="RadiusY" Value="10" />

    </Style>

</ResourceDictionary>

Noten cómo el elemento <ResourceDictionary> incluye los espacios de nombre xml, esto para poder resolver de manera correcta los elementos que agreguemos como Recursos en el Diccionario.

Por otro lado, para invocar ese Diccionario desde algún Diccionario de Recursos (UserControl, Application o algún contenedor) tenemos que hacerlo a través del elemento <ResourceDictionary> lo cual veremos más adelante en este mismo artículo.

Ahora bien, el archivo que contenga el Diccionario de Recursos podrá tener cualquier nombre arbitrario, pero lo que es un hecho es que el XAP aún necesitará referenciarlo de alguna manera:

  • Agregándolo como archivo en el proyecto de Silverlight y marcarlo como Resource
  • Agregándolo como archivo en el proyecto de Silverlight y marcarlo como Content
  • Tenerlo en un Ensamblado externo

Cada opción afecta la sintaxis con la que invocaremos el Diccionario de Recursos.

 

Build Action = Resource

Cuando marcamos un archivo como Resource en un proyecto de Silverlight, dicho archivo se incluirá en el diccionario de Recursos del Ensamblado.  Este mecanismo es conveniente cuando queremos tener una experiencia WYSIWYG en el diseño de la aplicación, ya que Visual Studio resolverá de manera inmediata el archivo.

Si utilizamos esta opción para el archivo con el Diccionario de Recursos, entonces la sintaxis en Xaml para referenciar los recursos que contiene deberá de ser de la manera:

nombre del ensamblado;component/nombre del archivo.xaml

El siguiente ejemplo de código muestra esta sintaxis al invocar el Diccionario:

<UserControl.Resources>

    <ResourceDictionary>

        <ResourceDictionary.MergedDictionaries>

            <ResourceDictionary Source="SilverlightApplication22;component/Estilos.xaml" />

        </ResourceDictionary.MergedDictionaries>

    </ResourceDictionary>

</UserControl.Resources>

 

Build Action = Content

Si marcamos el archivo como Content, el archivo formará parte del empaquetado XAP como tal, y ya no del Diccionario de Recursos del Ensamblado como mencionamos con anterioridad.

Si utilizamos esta opción, la sintaxis para referenciar el archivo del Diccionario de Recursos será:

/Nombre del archivo.xaml

Por ejemplo:

<UserControl.Resources>

    <ResourceDictionary>

        <ResourceDictionary.MergedDictionaries>

            <ResourceDictionary Source="/Estilos.xaml" />

        </ResourceDictionary.MergedDictionaries>

    </ResourceDictionary>

</UserControl.Resources>

Pero en este caso Visual Studio tendrá un comportamiento inesperado ya que no podremos ver el diseñador correctamente sino hasta ejecutar la aplicación como tal.

 

Diccionario de Recursos Merged en otro Ensamblado

Para usar un Diccionario de Recursos que está en otro Ensamblado, necesitamos primeramente referenciar el .dll en cuestión y posteriormente utilizar la misma sintaxis que vimos cuando el archivo está marcado como Resource en el mismo proyecto (sección “Build Action=Resource” en este mismo artículo).  Cabe mencionar que en este caso también el archivo deberá estar marcado como Resource en el Ensamblado externo.

 

Resumen

Los Merged Resource Dictionaries nos permiten crear una lista de recursos en un archivo para poderlos reutilizar entre diferentes proyectos de Silverlight o incluso entre un proyecto de Silverlight y uno de WPF ya que brindan un mecanismo de fácil implementación y desacoplamiento.

  • Share/Bookmark

Comments (5)

[...] Para ver el artículo completo haz clic aquí Posted: Jun 09 2009, 07:38 PM by rodrigo | with no comments Filed under: Silverlight, rdiazconcha, rdiazconcha.com, Rodrigo, Silverlight 3 [...]

[...] Diccionarios de Recursos de tipo Merged [...]

[...] Los Diccionarios Mezclados (o Merged en inglés) permiten declarar recursos en archivos independientes, para posteriormente reutilizar estos archivos en alguna otra aplicación Silverlight o incluso de WPF.  En nuestra aplicación de ejemplo crearemos dos diccionarios: Rojo.xaml y Azul.xaml.  Cada uno de ellos tendrá los Estilos Implícitos convenientes para cada tema (tonalidades rojizas en Rojo.xaml y azules en Azul.xaml).  Podemos hacer esto por medio de Visual Studio .NET 2010 o con Expression Blend 4; pero con este último tenemos más control así que utilizaremos dicha herramienta.  Para abrir Expression Blend 4 directamente desde Visual Studio .NET 2010 hagamos clic-derecho sobre el archivo MainPage.xaml y seleccionemos la opción “Open in Expression Blend…”: [...]

Hola que tal

Tengo una duda al usar un diccionario de recursos en otro ensamblado, ya que cuando lo agrego como referencia a un proyecto en vs 2010 o blend 4, al momento de dar click en la propiedad estilos de cualqueir control no puedo visualizar los estilos que tengo en el ensamblado que agregue. Alguna sugerencia?

Hola kronos,

Si ya tienes tu Diccionario de Recursos de tipo Mezlado (Merged) en un archivo .xaml aislado, copialo al otro proyecto y márcalo como Resource. Asegúrate que en tu App.xaml se esté referenciando correctamente:

Write a comment

Spam Protection by WP-SpamFree