Cómo: Usar un diccionario de recursos en el ámbito de aplicación

En este ejemplo se muestra cómo definir y usar un diccionario de recursos personalizado de ámbito de la aplicación.

Ejemplo

Application expone un almacén de ámbito de la aplicación para los recursos compartidos: Resources. De forma predeterminada, la propiedad Resources se inicializa con una instancia del tipo ResourceDictionary. Debe usar esta instancia cuando obtenga y establezca propiedades del ámbito de aplicación mediante Resources. Para obtener más información, consulte Cómo: Usar un diccionario de recursos en el ámbito de aplicación.

Si tiene varios recursos que establece con Resources, puede usar un diccionario de recursos personalizado para almacenar esos recursos y establecer Resources con este en su lugar. A continuación, se muestra cómo declarar un diccionario de recursos personalizado mediante XAML.

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
    <SolidColorBrush x:Key="StandardSolidColorBrush" Color="Blue" />
    <LinearGradientBrush x:Key="StandardLinearGradientBrush" StartPoint="0.0,0.0" EndPoint="1.0,1.0">
        <LinearGradientBrush.GradientStops>
            <GradientStop Color="White" Offset="0" />
            <GradientStop Color="Black" Offset="1" />
        </LinearGradientBrush.GradientStops>
    </LinearGradientBrush>
</ResourceDictionary>

El intercambio de diccionarios de recursos completos mediante Resources le permite admitir temas del ámbito de aplicación, donde cada tema se encapsula en un diccionario de recursos único. En el ejemplo siguiente se muestra cómo establecer ResourceDictionary.

<!--Set the Application ResourceDictionary-->
<Application.Resources>
    <ResourceDictionary Source="MyResourceDictionary.xaml" />
</Application.Resources>

A continuación, se muestra cómo puede obtener recursos del ámbito de la aplicación desde el diccionario de recursos que expone Resources en XAML.

<!--Set the brush as a StaticResource from the ResourceDictionary-->
<Rectangle Name="Rect" Height="200" Width="100" Fill="{StaticResource ResourceKey=StandardSolidColorBrush}" />

A continuación, se muestra cómo puede obtener también los recursos en el código.

//Get a resource from the ResourceDictionary in code
Brush gradientBrush = (Brush)Application.Current.FindResource("StandardLinearGradientBrush");
'Get a resource from the ResourceDictionary in code
Dim GradientBrush As Brush = Application.Current.FindResource("StandardLinearGradientBrush")

Hay dos aspectos que hay que tener en cuenta al usar Resources. En primer lugar, el elemento key del diccionario es un objeto, por lo que debe usar exactamente la misma instancia del objeto al establecer y obtener un valor de propiedad. (Tenga en cuenta que la clave distingue mayúsculas de minúsculas cuando se usa una cadena). En segundo lugar, el elemento value del diccionario es un objeto, por lo que tendrá que convertir el valor al tipo deseado al obtener un valor de propiedad.

Algunos tipos de recursos pueden usar automáticamente una propiedad definida por el tipo como una clave explícita, como los tipos Style y DataTemplate. Esto puede invalidar el valor x:Key. Para garantizar que se respeta la clave x:Key, declárela antes de la propiedad de clave explícita. Para obtener más información, consulte Estilos, plantillas de datos y claves implícitas.

Vea también