Share via


Cómo: Definir y hacer referencia a un recurso

Este ejemplo muestra cómo definir un recurso y hacer referencia a él mediante un atributo en el Lenguaje de marcado de aplicaciones extensibles (XAML).

Ejemplo

En el ejemplo siguiente se definen dos tipos de recursos: un recurso SolidColorBrush y varios recursos Style. El SolidColorBrush recurso MyBrush se usa para proporcionar el valor de varias propiedades que toman un valor de tipo Brush. Los recursos Style, PageBackground, TitleText y Label se dirigen cada uno a un tipo de control concreto. Los estilos fijan una variedad de propiedades diferentes en los controles objetivo, cuando ese recurso de estilo es referenciado por la clave del recurso y se usa para fijar la propiedad Style de varios elementos de control específicos definidos en XAML.

Tenga en cuenta que una de las propiedades dentro de los establecedores del estilo Label también hace referencia al recurso MyBrush definido anteriormente. Se trata de una técnica común, pero es importante recordar que los recursos se analizan y se escriben en un diccionario de recursos en el orden en que se proporcionan. El orden en el diccionario también solicita los recursos si se usa la extensión de marcado StaticResource para hacer referencia a ellos desde dentro de otro recurso. Asegúrese de que cualquier recurso al que haga referencia se haya definido anteriormente dentro de la colección de recursos que donde se solicite ese recurso. Si es necesario, puede solucionar el orden de creación estricto de las referencias de recursos mediante una extensión de marcado DynamicResource para hacer referencia al recurso en tiempo de ejecución, pero debe tener en cuenta que esta técnica de DynamicResource tiene consecuencias de rendimiento. Para obtener más información, vea Recursos XAML.

<Page Name="root"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Page.Resources>
    <SolidColorBrush x:Key="MyBrush" Color="Gold"/>
    <Style TargetType="Border" x:Key="PageBackground">
      <Setter Property="Background" Value="Blue"/>
    </Style>
    <Style TargetType="TextBlock" x:Key="TitleText">
      <Setter Property="Background" Value="Blue"/>
      <Setter Property="DockPanel.Dock" Value="Top"/>
      <Setter Property="FontSize" Value="18"/>
      <Setter Property="Foreground" Value="#4E87D4"/>
      <Setter Property="FontFamily" Value="Trebuchet MS"/>
      <Setter Property="Margin" Value="0,40,10,10"/>
    </Style>
    <Style TargetType="TextBlock" x:Key="Label">
      <Setter Property="DockPanel.Dock" Value="Right"/>
      <Setter Property="FontSize" Value="8"/>
      <Setter Property="Foreground" Value="{StaticResource MyBrush}"/>
      <Setter Property="FontFamily" Value="Arial"/>
      <Setter Property="FontWeight" Value="Bold"/>
      <Setter Property="Margin" Value="0,3,10,0"/>
    </Style>
  </Page.Resources>
  <StackPanel>
    <Border Style="{StaticResource PageBackground}">
      <DockPanel>
        <TextBlock Style="{StaticResource TitleText}">Title</TextBlock>
        <TextBlock Style="{StaticResource Label}">Label</TextBlock>
        <TextBlock DockPanel.Dock="Top" HorizontalAlignment="Left" FontSize="36" Foreground="{StaticResource MyBrush}" Text="Text" Margin="20" />
        <Button DockPanel.Dock="Top" HorizontalAlignment="Left" Height="30" Background="{StaticResource MyBrush}" Margin="40">Button</Button>
        <Ellipse DockPanel.Dock="Top" HorizontalAlignment="Left" Width="100" Height="100" Fill="{StaticResource MyBrush}" Margin="40" />
      </DockPanel>
    </Border>
  </StackPanel>
</Page>

Vea también