资源

资源是可以在应用程序中的不同位置重复使用的对象。

这些资源主要分为两种类型的资源: XAML 资源和资源数据文件。 XAML 资源的示例包括Brush和样式。 资源数据文件是应用程序所需的不可执行的数据文件。

每个框架级元素(FrameworkElement 或 FrameworkContentElement)都具有 Resources 属性,该属性是包含已定义资源的 ResourceDictionary 类型。 你可以在任何元素上定义资源,例如 Button。 但是,最常在根元素上定义资源,本示例中的根元素为 Page。

资源字典中的每个资源都必须具有唯一键。 在标记中定义资源时,可通过 x:Key 指令来分配唯一键。 通常情况下,这个键是一个字符串;但是,也可使用相应的标记扩展将其设置为其他对象类型。 资源的非字符串键用于 WPF 中的某些功能区,尤其是样式、组件资源和数据样式。

你可以使用具有资源标记扩展语法(指定资源的键名)的已定义资源。 例如,将资源用作另一个元素上的属性的值。

<Button Background="{StaticResource MyBrush}"/>
<Ellipse Fill="{StaticResource MyBrush}"/>

静态和动态资源

资源可引用为静态资源或动态资源。 可通过使用 StaticResource 标记扩展或 DynamicResource 标记扩展创建引用。

StaticResource 标记扩展通过在所有可用的资源字典中查找键值来处理键。 处理在加载期间进行,即加载过程需要分配属性值时。

DynamicResource 标记扩展则通过创建表达式来处理键,而且表达式会保持未计算状态,直至应用运行为止。当应用实际运行时,表达式会进行计算并提供一个值。


静态资源

在以下情况下,最适合使用静态资源引用:

  • 应用设计将其大多数资源集中到页面或应用程序级资源字典中。

  • 要设置不在 DependencyObject 或 Freezable 上的属性的值。

  • 要创建的资源字典将编译成 DLL,并将打包为应用的一部分或在应用间共享。

  • 要为自定义控件创建主题,并要定义在主题中使用的资源。

  • 要使用资源设置大量依赖属性。

  • 想为所有使用者更改基础资源,或想通过使用 x:Shared 属性为每个使用者维护单独的可写实例。

静态资源查找行为

下面介绍属性或元素引用静态资源时自动发生的查找过程:

  1. 查找进程在用于设置属性的元素所定义的资源字典中查找请求的键。

  2. 查找过程随后会向上遍历逻辑树,以查找父元素及其资源字典。 此过程到达根元素后才会停止。

  3. 检查应用资源。 应用资源就是 Application 对象为 WPF 应用定义的资源字典中的资源。

从资源字典中进行的静态资源引用必须引用已在资源引用前进行过词法定义的资源。 静态资源引用无法解析前向引用。 因此,请设计资源字典的结构,以便在每个相应资源字典的开头或邻近开头的位置定义资源。

静态资源查找可以扩展到主题或系统资源中,但此查找受支持只是因为 XAML 加载程序推迟了请求。 为了让页面加载时的运行时主题正确地应用到应用,这种延迟是必需的。 但是,不建议使用对已知仅在主题中存在或作为系统资源存在的键的静态资源引用,因为如果用户实时更改主题,不会重新计算此类引用。 请求主题或系统资源时,动态资源引用更为可靠。 例外情况是当主题元素自身请求另一个资源。 出于上述原因,这些引用应该是静态资源引用。

因找不到静态资源引用而引发的异常行为各不相同。 如果资源被延迟,则异常会在运行时发生。 如果资源未延迟,则异常会在加载时发生。


动态资源

在以下情况下,最适合使用动态资源:

  • 资源(包括系统资源或用户可设置的资源)的值取决于直到运行时才知道的条件。 例如,你可以创建 setter 值(引用由 SystemColors、SystemFonts 或 SystemParameters 公开的系统属性)。

  • 要为自定义控件创建或引用主题样式。

  • 打算在应用生存期内调整 ResourceDictionary 的内容。

  • 拥有存在相互依赖关系且可能需要进行前向引用的复杂资源结构。

  • 要引用从编译或工作集的角度来看很大的资源,而且该资源在页面加载时可能不会立即使用。

  • 要创建的样式的 setter 值可能来自受主题或其他用户设置影响的其他值。

  • 要将资源应用于可能会在应用生存期内在逻辑树中重定父级的元素。 父级更改后,资源查找范围也可能会随之更改;因此,如果希望重定父级的元素的资源基于新范围重新进行计算,请始终使用动态资源引用。

动态资源查找行为

如果调用 FindResource 或 SetResourceReference,则动态资源引用的资源查找行为会与代码中的查找行为并行执行:

  1. 查找在用于设置属性的元素所定义的资源字典中查找请求的键:

    • 如果元素定义 Style 属性,则该元素的 System.Windows.FrameworkElement.Style 将检查其 Resources 字典。

    • 如果元素定义 Template 属性,则检查该元素的 System.Windows.FrameworkTemplate.Resources 字典。

  2. 查找会向上遍历逻辑树,以查找父元素及其资源字典。 此过程到达根元素后才会停止。

  3. 检查应用资源。 应用资源就是 Application 对象为 WPF 应用定义的资源字典中的资源。

  4. 检查主题资源字典中当前处于活动状态的主题。 如果主题在运行时发生更改,则会重新计算值。

  5. 检查系统资源。

异常行为(如果有)各不相同:

  • 如果 FindResource 调用请求了某个资源但未找到该资源,则会引发异常。

  • 如果 TryFindResource 调用请求了某个资源但未找到该资源,不会引发任何异常,并且返回的值为 null。 如果要设置的属性不接受 null,则仍有可能引发更深的异常(取决于要设置的单独属性)。

  • 如果 XAML 中的动态资源引用请求了某个资源但未找到该资源,则行为取决于常规属性系统。 常规行为即存在资源的级别上没有发生属性设置操作时执行的行为。 例如,如果尝试使用无法计算的资源来设置个别按钮元素上的背景,则值设置操作不会产生任何结果,但有效值可能仍来自属性系统和值优先级中的其他参与者。 例如,背景值可能仍来自在本地定义的某个按钮样式,或来自主题样式。 对于并非由主题样式定义的属性,资源计算失败后的有效值可能来自属性元数据中的默认值。

限制

动态资源引用存在一些重要限制。 必须至少满足以下条件之一:

  • 要设置的属性必须是 FrameworkElement 或 FrameworkContentElement 上的属性。 该属性必须由 DependencyProperty 支持。

  • 该引用用于 StyleSetter 内的值。

  • 要设置的属性必须是 Freezable(以 FrameworkElement 或 FrameworkContentElement 属性的值或 Setter 值的形式提供)上的属性。

由于要设置的属性必须是 DependencyProperty 或 Freezable 属性,大多数属性更改都可以传播到 UI,这是因为属性更改(更改的动态资源值)会经由属性系统确认。 大多数控件都包含相应的逻辑;当 DependencyProperty 有所更改且该属性可能会影响布局时,该逻辑将强制使用控件的其他布局。 但是,并不保证所有使用 DynamicResource 标记扩展作为其值的属性都能在 UI 中提供实时更新。 此功能可能仍会因属性、属性所属的类型,甚至应用的逻辑结构而异。

样式、DataTemplate 和隐式键

尽管 ResourceDictionary 中的所有项都必须具有键,但这并不意味着所有资源都必须具有显式 x:Key。 多种对象类型在定义为资源时都支持隐式键,其键值会与另一属性的值绑定。 这类键被称为隐式键,而 x:Key 属性为显式键。 任何隐式键都可通过指定显式键来覆盖。

关于资源,一个重要的方案就是用于定义 Style。 事实上,Style 几乎总会作为资源字典中的条目进行定义,因为样式在本质上可供重复使用。 有关样式的详细信息,请参阅样式设置和模板化。

控件样式可通过隐式键来创建和引用。 用于定义控件默认外观的主题样式依赖于该隐式键。 从请求的角度来看,隐式键是控件本身的 Type。 从定义资源的角度来看,隐式键是样式的 TargetType。 因此,如果要创建自定义控件的主题或要创建会与现有主题样式交互的样式,则无需为该 Style 指定 x:Key 指令。 另外,如果想要使用主题样式,则根本无需指定任何样式。 例如,即使 Style 资源似乎没有键,以下样式定义仍起作用:

<Style TargetType="Button"><Setter Property="Background"><Setter.Value><LinearGradientBrush><GradientStop Offset="0.0" Color="AliceBlue"/><GradientStop Offset="1.0" Color="Salmon"/>           </LinearGradientBrush></Setter.Value></Setter>  <Setter Property="FontSize" Value="18"/>
</Style>

该样式确实具有一个键:隐式键 typeof(System.Windows.Controls.Button)。 在标记中,可以直接将 TargetType 指定为类型名称(或者,可以选择使用 {x:Type...} 返回 Type)。

通过 WPF 使用的默认主题样式机制,即使 Button 本身不尝试指定其 Style 属性或对样式的特定资源引用,该样式也将作为页面上 Button 的运行时样式应用。 在页面中定义的样式位于查找序列中的靠前位置(在主题字典样式之前),其所用的键与主题字典样式的键相同。 可以在页面上的任意位置指定 <Button>Hello</Button>,使用 Button 的 TargetType 定义的样式将应用于该按钮。 如果需要,仍可为此样式显式指定与 TargetType 的类型值相同的键,以求在标记中清楚明示,但这是可选的。

如果 OverridesDefaultStyle 为 true,则样式的隐式键不会应用于控件。 (另请注意,OverridesDefaultStyle 可能被设置为控件类的本机行为的一部分,而不是在控件的实例上显式设置。)此外,为了支持在派生类方案中使用隐式键,控件必须替代 DefaultStyleKey(作为 WPF 的一部分提供的所有现有控件都包括此替代)。 有关样式、主题和控件设计的详细信息,请参阅可样式化控件的设计指南。

DataTemplate 也有一个隐式键。 DataTemplate 的隐式键是 DataType 属性值。 DataType 也可以作为类型的名称来指定,而不是使用 {x:Type...} 来显式指定。 有关详细信息,请参阅数据模板化概述。


资源和代码

从代码访问资源

若要从代码中检索资源,最简单的方法是 FindResource、TryFindResource 从应用程序中的框架级别对象调用或方法。

这两个方法之间的行为差异在于当未找到所请求的键时所发生的情况。 FindResource 引发异常; TryFindResource 不会引发异常,而会返回 null 。通常应将返回的对象强制转换为请求资源时设置的属性所要求的类型。

对资源的搜索从调用元素开始,然后继续搜索逻辑树中的后续父元素。 如果必要,将继续查找应用程序资源、主题以及系统资源。 资源的代码请求将正确地说明资源字典(可能排在从 XAML 加载的资源字典之后)中的运行时更改,也将说明实时系统资源更改。

下面是一个简短的代码示例,它按键查找资源,并使用返回的值来设置作为 Click 事件处理程序实现的属性。

void SetBGByResource(object sender, RoutedEventArgs e)
{Button b = sender as Button;b.Background = (Brush)this.FindResource("RainbowBrush");
}

分配资源引用的一种替代方法是 SetResourceReference 。 该方法采用两个参数:资源的键,以及特定依赖属性(应向其分配资源值的元素实例上的依赖属性)的标识符。 就功能而言,此方法是相同的,且具有无需强制转换任何返回值的优点。

以编程方式访问资源的另一种方法是以 Resources 字典形式访问属性的内容。 通过访问该属性包含的字典,还可以向现有集合添加新资源、检查集合中是否已经存在给定的键名称以及执行其他字典/集合操作。

您可以 Resources 使用特定键作为索引在任何给定集合中进行索引,但您应注意,以这种方式访问资源不遵循资源解析的正常运行时规则。 你访问的仅是该特定集合。 如果在请求的键处未找到有效的对象,则资源查找将不会遍历范围直至根或应用程序。 但是,在某些情况下,正因为对键的搜索范围进行了更多的约束,才使得此方法在性能上具有优势。 ResourceDictionary有关如何直接使用资源字典的详细信息,请参见类。

使用代码创建资源

如果要通过代码方式创建整个 WPF 应用程序,可能也需要通过代码方式创建该应用程序中的任何资源。 若要实现此目的,请创建一个新的 ResourceDictionary 实例,然后使用对的连续调用将所有资源添加到字典中 ResourceDictionary.Add 。 然后,使用 ResourceDictionary 创建的来设置 Resources 页面范围中存在的元素的属性或 Application.Resources 。 你还可以将 ResourceDictionary 用作独立对象,而无需将其添加到元素。 但是,如果这样做,必须通过项键来访问其中的资源,就好像它是泛型字典一样。 ResourceDictionary未附加到元素属性的不是 Resources 元素树的一部分,并且在查找序列中没有可供和相关方法使用的作用域 FindResource 。

将对象用作键

大多数资源用法都会将资源的键设置为字符串。 但是,各个 WPF 功能都特意不使用字符串类型来指定键,而是将此参数设置为对象。 WPF 样式和主题支持使用按对象对资源进行键控的功能。 如果主题中的样式是其他非样式控件的默认样式,则这些样式将由 Type 其应用于的控件的进行键控。 按类型进行键控提供了一种可靠的查找机制,该机制作用于每个控件类型的默认实例,即使派生类型不具有默认样式,也可以通过反射检测到类型,并将类型用于设置派生类的样式。 可以 Type XAML 通过使用 x:Type 标记扩展为中定义的资源指定密钥。 对于支持 WPF 功能的其他非字符串键用法,也存在类似扩展,如 ComponentResourceKey 标记扩展。


合并资源字典

Windows Presentation Foundation (WPF) 资源支持合并资源字典功能。 此功能提供一种方法,可在编译的 XAML 应用程序外部定义 WPF 应用程序的资源部分。 然后可以在应用程序之间共享资源,还可更方便地将资源隔离以进行本地化。

引入合并资源字典

在标记中,使用以下语法将合并资源字典引入页面:

<Page.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="myresourcedictionary.xaml"/><ResourceDictionary Source="myresourcedictionary2.xaml"/></ResourceDictionary.MergedDictionaries></ResourceDictionary>
</Page.Resources>

请注意, ResourceDictionary 元素没有 "x:Key" 指令,资源集合中的所有项通常都需要此指令。 但集合中的另一个 ResourceDictionary 引用 MergedDictionaries 是一个特殊情况,为此合并资源字典方案预留。 ResourceDictionary引入合并资源字典的不能包含x:Key 指令。 通常情况下, ResourceDictionary 集合中的每个都 MergedDictionaries 指定一个 Source 属性。 的值 Source 应为 (URI) 的统一资源标识符,该标识符解析为要合并的资源文件的位置。 该 URI 的目标必须是另一个 XAML 文件,并将 ResourceDictionary 作为其根元素。

备注

在指定为合并字典的中定义资源是合法的 ResourceDictionary ,或者作为指定的替代方法 Source ,或者除了指定的源中包含的所有资源。 但是,这不是一种常见方案;合并字典的主要方案是从外部文件位置合并资源。 如果要在页的标记中指定资源,通常应在主 ResourceDictionary 和不是合并字典中定义这些资源。

合并字典的行为

合并字典中的资源占用资源查找范围中的一个位置,此范围恰好在它们合并到的主要资源字典中的范围之后。

尽管任何字典中的资源键必须唯一,但一个资源键可在一组合并字典中多次存在。 在这种情况下,返回的资源将来自集合中按顺序找到的最后一个字典 MergedDictionaries 。 如果 MergedDictionaries 集合是在中定义的 XAML ,则集合中合并字典的顺序就是标记中提供的元素的顺序。 如果在主要字典和合并的字典中均定义了同一个键,则返回的资源将来自主要字典。 这些范围规则同等地适用于静态资源引用和动态资源引用。

合并字典和代码

可通过代码将合并字典添加到 Resources 字典。

任何Resources属性存在的默认初始为空的ResourceDictionary,也具有默认初始为空的MergedDictionaries集合属性。要通过代码添加合并的字典,您需要获取对所需主要ResourceDictionary的引用,获取其MergedDictionaries属性值,然后调用MergedDictionaries中包含Add的泛型。您添加的对象必须是新的ResourceDictionary。在代码中,您没有设置Source属性。相反,您必须获取ResourceDictionaryCollection创建一个或加载一个对象。一种加载现有ResourceDictionary的方法,以在具有ResourceDictionary根的现有XAML文件流上调用XamlReader.Load,然后将XamlReader.Load返回值转换为ResourceDictionary。

合并资源字典 URI

对于如何包含合并资源字典,有几种方法,这些方法由您将使用的统一资源标识符 (URI) 格式指定。 这些技术可概括地分为两类:作为项目的一部分编译的资源,和不作为项目的一部分编译的资源。

对于作为项目的一部分编译的资源,可使用引用资源位置的相对路径。 相对路径会在编辑期间计算。 必须将资源作为“资源”生成操作定义为项目的一部分。 如果将资源 .xaml 文件作为“资源”包括在项目中,则无需将资源文件复制到输出目录,因为资源已包括在编译的应用程序中。 也可以使用“内容”生成操作,但必须将文件复制到输出目录,还需将相同路径关系中的资源文件部署到可执行文件。

备注

不要使用“嵌入资源”生成操作。 应用程序支持生成操作本身 WPF ,但的解析 Source 并未合并 ResourceManager ,因此不能将单个资源与流分离。 你仍可以将嵌入的资源用于其他目的,只要你还用于 ResourceManager 访问资源即可。

还有一种相关技术是使用指向 XAML 文件的 Pack URI,并将其作为“源”进行引用。 Pack URI 可启用对引用程序集的组件和其他技术的引用。 有关 Pack URI 的详细信息,请参阅 WPF 应用程序资源、内容和数据文件。

对于不作为项目的一部分编译的资源,URI 将在运行时计算。 可使用常见的 URI 传输(如 file: 或 http:)引用资源文件。 使用非编译资源方法的缺点是:file: 访问需要额外部署步骤,并且 http: 访问意味着需访问 Internet 安全区域。

重用合并字典

可以在应用程序之间重复使用或共享合并资源字典,因为可通过任何有效的统一资源标识符 (URI) 来引用要合并的资源字典。 执行此操作的确切方式取决于应用程序部署策略和所遵循的应用程序模型。 前面提及的 Pack URI 策略提供了一种方法,通常可通过共享程序集引用在开发期间跨多个项目将合并资源作为源使用。 在此方案中,资源仍由客户端分发,并且至少有一个应用程序必须部署引用的程序集。 还有可能通过使用 http 协议的分布式 URI 引用合并资源。

另一种合并字典/应用程序部署的可能方案是将合并字典编写为本地应用程序文件或编写到共享存储。

本地化

如果需要本地化的资源保留为松散的 XAML,并且隔离于将合并为主要字典的字典,则可单独本地化这些文件。 这是本地化附属资源程序集的轻量级替代方法。 有关详细信息,请参阅 WPF 全球化和本地化概述。


优化性能:应用程序资源

WPF 允许共享应用程序资源,使你能够跨相似类型的元素支持一致的外观或行为。

共享资源

如果你的应用程序使用自定义控件并在 ResourceDictionary (或 XAML 资源节点) 中定义资源,则建议你在 Application 或对象级别定义资源 Window ,或者在自定义控件的默认主题中定义这些资源。 在自定义控件中定义资源 ResourceDictionary 会对该控件的每个实例产生性能影响。

例如,如果您有一些在自定义控件的资源定义和自定义控件实例的资源定义中定义的性能密集型Brush操作,则应用程序的工作集会显著增加。

为了说明这一点,请考虑以下事项。 假设您正在使用开发纸牌游戏 WPF 。 对于大多数纸牌游戏,需要52个包含52个不同表面的卡。 您决定实现卡片自定义控件,并定义52Brush (每个Brush表示卡片自定义控件的资源) 。 在主应用程序中,最初创建此卡自定义控件的52实例。 卡自定义控件的每个实例都会生成52个 Brush 对象实例,这为您的应用程序提供了总共 52 * 52 Brush 对象。 通过将Brush从卡片自定义控件资源移出到 Application 或 Window 对象级别,或在自定义控件的默认主题中进行定义,可以减少应用程序的工作集,因为现在可以在卡片控件的52实例之间共享52Brush。

共享Brush而不复制

如果有多个使用同一对象的元素 Brush ,请将Brush定义为资源并对其进行引用,而不是在 XAML 中以内联方式定义Brush。 此方法将创建一个实例并重复使用它,而在 XAML 中以内联方式定义将为每个元素创建一个新的实例。

以下标记示例说明了这一点:

<StackPanel.Resources><LinearGradientBrush x:Key="myBrush" StartPoint="0,0.5" EndPoint="1,0.5" Opacity="0.5"><LinearGradientBrush.GradientStops><GradientStopCollection><GradientStop Color="GoldenRod" Offset="0" /><GradientStop Color="White" Offset="1" /></GradientStopCollection></LinearGradientBrush.GradientStops></LinearGradientBrush>
</StackPanel.Resources><!-- Non-shared Brush object. -->
<Label>Label 1<Label.Background><LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5" Opacity="0.5"><LinearGradientBrush.GradientStops><GradientStopCollection><GradientStop Color="GoldenRod" Offset="0" /><GradientStop Color="White" Offset="1" /></GradientStopCollection></LinearGradientBrush.GradientStops></LinearGradientBrush></Label.Background>
</Label><!-- Shared Brush object. -->
<Label Background="{StaticResource myBrush}">Label 2</Label>
<Label Background="{StaticResource myBrush}">Label 3</Label>

尽可能使用静态资源

静态资源通过查找对已定义资源的引用来为任何 XAML 属性特性提供一个值。 该资源的查找行为类似于编译时查找。

另一方面,动态资源将在初始编译期间创建一个临时表达式,从而推迟资源的查找,直到实际需要请求的资源值才能构造对象。 该资源的查找行为类似于运行时查找,这会影响性能。 在应用程序中尽可能使用静态资源,仅在必要时使用动态资源。

以下标记示例演示如何使用两种类型的资源:

<StackPanel.Resources><LinearGradientBrush x:Key="myBrush" StartPoint="0,0.5" EndPoint="1,0.5" Opacity="0.5"><LinearGradientBrush.GradientStops><GradientStopCollection><GradientStop Color="GoldenRod" Offset="0" /><GradientStop Color="White" Offset="1" /></GradientStopCollection></LinearGradientBrush.GradientStops></LinearGradientBrush>
</StackPanel.Resources><!-- Non-shared Brush object. -->
<Label>Label 1<Label.Background><LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5" Opacity="0.5"><LinearGradientBrush.GradientStops><GradientStopCollection><GradientStop Color="GoldenRod" Offset="0" /><GradientStop Color="White" Offset="1" /></GradientStopCollection></LinearGradientBrush.GradientStops></LinearGradientBrush></Label.Background>
</Label><!-- Shared Brush object. -->
<Label Background="{StaticResource myBrush}">Label 2</Label>
<Label Background="{StaticResource myBrush}">Label 3</Label>

FrameworkElement.Resources 属性

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

[System.Windows.Markup.Ambient]
public System.Windows.ResourceDictionary Resources { get; set; }

ResourceDictionary 类

提供一个哈希表/字典实现,其中包含组件所使用的 WPF 资源以及 WPF 应用程序的其他元素。

ResourceDictionaryXAML 加载程序加载应用程序代码时,不会立即处理中的项。 相反,将 ResourceDictionary 以对象的形式保留,单独的值仅在被明确请求时处理。

ResourceDictionary类不是从派生的 DictionaryBase 。 相反, ResourceDictionary 类实现 IDictionary 但同时依赖于 Hashtable 。

在 Extensible Application Markup Language (XAML) , ResourceDictionary 类通常是一个隐式集合元素,该Resources 元素是多个属性的对象元素值 (在属性元素语法中给定)。 有关 XAML 中的隐式集合的详细信息,请参阅 Xaml 语法详述。 如果要指定合并字典,则会出现异常;有关详细信息,请参阅 合并资源字典。

另一种可能的 XAML 用法是将资源字典声明为离散 XAML 文件,并在运行时将其加载到 Load 中,或将其作为资源或松散文件包含在 (完全信任的) 项目中。 在这种情况下, ResourceDictionary 可以将声明为对象元素,作为 XAML 的根元素。 如果打算将其用作根元素,则必须将相应的 XML 命名空间值映射 (WPF 命名空间的默认值,并且通常 x: 用于 XAML 命名空间) 到 ResourceDictionary 元素。 然后,可以添加定义资源的子元素,每个元素都有一个 " x:Key " 值。

XAML 隐式集合用法

<object>  <object.resourcesProperty>  oneOrMoreResources  </object.resourcesProperty>
</object>
ResourceDictionary 属性
名称 备注 权限
Count 获取基 ResourceDictionary 中的项数。 get;
DeferrableContent 获取或设置此资源字典的可推迟内容。 get; set;
InvalidatesImplicitDataTemplateResources 获取或设置一个值,指示 ResourceDictionary 对象引发的失效是否会导致 ContentPresenter 对象重新评估其所选的模板。 某个隐式数据模板资源发生改变时,将发生失效。 get; set;
IsFixedSize 获取此 ResourceDictionary 是否具有固定大小。 get;
IsReadOnly 获取此 ResourceDictionary 是否为只读。 get;
Item[] 获取或设置与给定键相关联的值。 get; set;
Keys 获取此 ResourceDictionary 中包含的所有键的集合。 get;
MergedDictionaries 获取 ResourceDictionary 字典的集合,这些字典构成了合并字典中的各种资源字典。 get;
Source 获取或设置要从其加载资源的统一资源标识符 (URI)。 get; set;
Values 获取与此 ResourceDictionary 中包含的键关联的所有值的集合。 get;
ResourceDictionary 方法
名称 备注 权限
Add 通过键将资源添加到此 ResourceDictionary 中。 public
BeginInit 开始此 ResourceDictionary 的初始化阶段。 public
Clear 清除基 ResourceDictionary 中的所有键(以及值)。 这不会清除任何合并的字典项。 public
Contains 确定是否 ResourceDictionary 包含带有指定键的元素。 public
CopyTo 将 ResourceDictionary 元素复制到位于指定索引处的一维 DictionaryEntry 中。 public
EndInit 结束初始化阶段,并使上一个树无效,以便在初始化阶段对键所做的更改都可以得到解决。 public
FindName 此字典实现不支持该方法。 public
GetEnumerator 返回一个可用于循环访问 IDictionaryEnumerator 的 ResourceDictionary。 public
OnGettingValue 当 ResourceDictionary 接收资源请求时发生。 protected
RegisterName 此字典实现不支持该方法。 public
Remove 从基字典中移除带有指定键的项。 public
UnregisterName 此字典实现不支持该方法。 public
ResourceDictionary 接口
接口 方法
ICollection.CopyTo void ICollection.CopyTo (Array array, int arrayIndex);
ICollection.IsSynchronized bool System.Collections.ICollection.IsSynchronized { get; }
ICollection.SyncRoot object System.Collections.ICollection.SyncRoot { get; }
IEnumerable.GetEnumerator System.Collections.IEnumerator IEnumerable.GetEnumerator ();
IUriContext.BaseUri Uri System.Windows.Markup.IUriContext.BaseUri { get; set; }

资源Resource的介绍相关推荐

  1. 纪元2205量子计算机,《纪元2205》北极资源图鉴与介绍 北极资源有哪些

    原标题:<纪元2205>北极资源图鉴与介绍 北极资源有哪些 纪元2205是许多玩家的热爱,今天小编就为大家带来了纪元2205北极资源图鉴与介绍,非常直观清晰,下面就让我们一起来看看纪元22 ...

  2. 王者荣耀s12服务器维护,王者荣耀S12赛季野区资源调整了什么?S12赛季野区资源调整内容介绍...

    王者荣耀S12赛季野区资源调整了什么?王者荣耀S12赛季野区资源再次大幅调整,对打野英雄有更多打限制,因为只有带惩击才能购买打野装备,同时每把打野刀都提升了,但是相应的野怪血量和金币收益等方面也再次提 ...

  3. WPF的资源Resource

    文章目录 WPF资源 0.WPF支持的资源形式或者说分类 1.资源层级有四个等级 2.合并资源字典到Resource属性 3.关于静态StaticResource和动态Resource 4.关于资源字 ...

  4. maven之build resources resource 详细介绍

    Maven_Build_Resources 功能:主要用于打包资源文件,默认情况下maven只打包src/main/resource下的资源,通过: 1.设置build_resources 2.使用b ...

  5. 通用型游戏资源提取工具介绍

    先感慨一下,这是篇2007年的帖子啊!!13年了! 游戏资源包括了游戏的图片.文字.音乐.动画和其他数据资源.虽然很多游戏的资源都是开放的或者采用通用格式压缩的,但也不少游戏是经特殊格式打包过了,要想 ...

  6. springboot 资源resource文件加载优先级

    文章目录 1.问题 2.springboot的资源目录优先级 3.相关源码 3. webjars 1.问题 在通过spring项目官网生成的springboot project项目中,通常我们知道,r ...

  7. 通用型游戏资源提取工具介绍收藏

    游戏资源包括了游戏的图片.文字.音乐.动画和其他数据资源.虽然很多游戏的资源都是开放的或者采用通用格式压缩的,但也不少游戏是经特殊格式打包过了,要想得到这些资源可以寻找专用的资源提取工具.但并非所有游 ...

  8. 【转贴】通用型游戏资源提取工具介绍 (推荐)

    游戏资源包括了游戏的图片.文字.音乐.动画和其他数据资源.虽然很多游戏的资源都是开放的或者采用通用格式压缩的,但也不少游戏是经特殊格式打包过了,要想得到这些资源可以寻找专用的资源提取工具.但并非所有游 ...

  9. ue4人物动作_ue4人物动作资源Resource Gathering Animation418

    Update 2: https://youtu.be/Rc7IbkxNUE8 Update 1: https://www.youtube.com/watch?v=MpyC_CitR5U Video P ...

最新文章

  1. tensorboard merge报错_什么是TensorBoard?
  2. Spring(15)——基于注解的配置(二)
  3. 160308_Helloworld_Console Application
  4. openstack常用运维命令_OpenStack运维指南pdf
  5. Linux基础(十一)--Linux文件查找命令Find详解
  6. vtkdelaunay3d的参数设置_VTK 渲染体数据并加方位标注
  7. Python词频统计(去重)
  8. VMware ESXi 安装
  9. 武汉工程大学计算机学院吴云韬,周华兵-武汉工程大学计算机科学与工程学院...
  10. WINDOWS系统进程查询
  11. 完美日记母公司逸仙电商将收购护肤品牌Eve Lom
  12. Java设计模式(六)装饰器模式-与代理模式的区别-项目实战应用
  13. 【Python军火库】Re基础入门:正则表达式
  14. 高数_第6章无穷级数
  15. 如何使用Microsoft PowerPoint制作海报
  16. VS编译失败,找不到源文件!!!
  17. 线性抛物方程的通用有限差分格式及代码(未完)
  18. IESM项目实训四——Web Audio录音和字符串转拼音
  19. java park unpark_LockSupport(park/unpark)源码分析
  20. Android获取两条线之间的夹角度数

热门文章

  1. 索引原理-索引数据结构
  2. MPAndroidChart的详细使用——BarChart条形图(二)
  3. 高鸿业微观经济学第7版笔记和课后习题答案
  4. 前后端异地、接口如何联调呢
  5. 浅谈Linux标准的文件系统(Ext2/Ext3/Ext4)
  6. 异常处理:.net.UnknownHostException nodename nor servname provided, or not known
  7. 极简权限认证必须掌握【代码+原理+建议收藏】
  8. principal java_CAS 单点登录服务端 如何获取到principal
  9. Pytorch、TorchVision、Python、Jetpack版本匹配问题
  10. python 画折线图怎么控制x轴间隔_用Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围...