本文档已存档,并且将不进行维护。

FrameworkElement.Resources 属性

更新:2007 年 11 月

获取或设置本地定义的资源字典。

命名空间:  System.Windows
程序集:  PresentationFramework(在 PresentationFramework.dll 中)
用于 XAML 的 XMLNS:http://schemas.microsoft.com/winfx/xaml/presentation

public ResourceDictionary Resources { get; set; }
/** @property */
public ResourceDictionary get_Resources()
/** @property */
public  void set_Resources(ResourceDictionary value)

public function get Resources () : ResourceDictionary
public function set Resources (value : ResourceDictionary)
<object>
  <object.Resources>
    oneOrMoreResourceElements
  </object.Resources>
</object>
oneOrMoreResourceElements
                    一个或多个对象元素,其中每个元素都定义一个资源。每个 ResourceDictionary 中的每个资源属性元素都必须具有一个唯一的 x:Key 属性值,该值在从 ResourceDictionary 检索值时充当唯一键。
                

属性值

类型:System.Windows.ResourceDictionary

资源当前的本地定义字典,可在其中按键访问每个资源。

可在可扩展应用程序标记语言 (XAML) 中完整或部分定义的资源字典通常作为属性元素创建,并通常位于任何单个页或应用程序的根元素上。将资源字典置于此级使得从页中的单个子元素(对于应用程序,则是从任意页)对其进行查找变得更加容易。在大多数应用程序方案中,建议将样式定义为资源字典中的对象元素,或定义为外部资源,以便整个样式资源可以是独立的(此方法通过分隔需要编辑的物理文件,有助于将设计人员的责任与开发人员的责任分隔开来)。

请注意,此属性仅返回该元素中直接声明的资源字典。这与实际的资源查找过程不同,在实际的资源查找过程中,子元素通过向上递归搜索,可以访问每个父元素中定义的任意资源。

还可以从集合内部通过代码引用资源,但请注意,除非声明该字典的元素引发 Loaded 事件,否则在 XAML 中创建的资源肯定不可访问。事实上,资源是异步进行分析的,即使 Loaded 事件也无法保证可以引用 XAML 定义的资源。因此,您通常只应在运行时代码中访问 XAML 定义的资源,或者通过其他 XAML 技术(如样式或对于属性值的资源扩展引用)访问这些资源。通过代码访问资源时,实质上相当于从 XAML 中进行 DynamicResource 引用。

基础 ResourceDictionary 支持通过使用代码从集合内添加、移除或查询资源所需的方法。可以设置 Resources 属性以支持将元素的资源集合完全替换为新的或不同的 ResourceDictionary 的方案。

请注意,所演示的 XAML 语法不包含对应于 ResourceDictionary 的元素。这是隐式集合语法的一个示例;可以省略用来表示集合元素的标记。但却指定了作为项添加到集合的元素。有关隐式集合和 XAML 的更多信息,请参见 XAML 语法术语。一种仍将 ResourceDictionary 显式指定为元素的情况是您引入了合并字典,在这种情况下,ResourceDictionary 通常没有子元素。有关详细信息,请参见合并资源字典

本示例演示如何使用可扩展应用程序标记语言 (XAML) 中的一个属性来定义和引用资源。

下面的示例定义两种类型的资源:一个 SolidColorBrush 资源和多个 Style 资源。SolidColorBrush 资源 MyBrush 用于提供多个属性的值,其中每个属性都有一个 Brush 类型值。Style 资源 PageBackgroundTitleTextLabel 均针对一种特定的控件类型。当该样式资源由资源键引用并用于设置 XAML 中定义的多个特定控件元素的 Style 属性时,这些样式即设置目标控件的多个不同属性。

请注意,Label 样式的 setter 中的某个属性还引用前面定义的 MyBrush 资源。这是一种很常见的技术,但是一定要记住资源是按照它们的给出顺序进行分析并输入到资源字典中的,这一点非常重要。如果您使用 StaticResource 标记扩展从其他资源引用这些资源,则也是按照它们在字典中的顺序来请求它们的。确保在请求资源之前已在资源集合中对该资源进行了定义。如有必要,您可以使用 DynamicResource 标记扩展在运行时引用资源,这样可以绕过严格的资源引用创建顺序,但应注意这种 DynamicResource 技术会对性能产生一定的负面影响。有关详细信息,请参见资源概述

<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>


有关完整示例,请参见 定义资源示例

Windows Vista

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求

.NET Framework

受以下版本支持:3.5、3.0
显示: