通过评估对已定义资源的引用,为任何 XAML 属性提供值。 资源在 ResourceDictionary 中定义, StaticResource 用法引用 ResourceDictionary 中该资源的键。
XAML 属性用法
<object property="{StaticResource key}" .../>
XAML 值
| 术语 | Description |
|---|---|
| 关键值 | 所请求资源的密钥。 此密钥最初由 ResourceDictionary 分配。 资源键可以是 XamlName 语法中定义的任何字符串。 |
注解
StaticResource 是一种用于获取 XAML 属性的值的技术,该属性在 XAML 资源字典中的其他位置定义。 值可能放置在资源字典中,因为它们旨在由多个属性值共享,或者因为 XAML 资源字典用作 XAML 打包或分解技术。 XAML 打包技术的示例是控件的主题字典。 另一个示例是用于资源回退的合并资源字典。
StaticResource 采用一个参数,该参数指定所请求资源的密钥。 资源键始终是 Windows 运行时 XAML 中的字符串。 有关如何最初指定资源密钥的详细信息,请参阅 x:Key 属性。
本主题未说明 StaticResource 如何在资源字典中解析为项目的规则。 这取决于引用和资源是否都存在于模板中、是否使用合并资源字典等。 有关如何定义资源并正确使用 ResourceDictionary(包括示例代码)的详细信息,请参阅 ResourceDictionary 和 XAML 资源引用。
重要StaticResource 不得尝试对 XAML 文件中进一步定义的资源进行前向引用。 不支持尝试这样做。 尽管前向引用不会失败,但尝试创建它会导致性能损失。 为获得最佳结果,请调整资源字典的构成,以避免转发引用。
尝试将 StaticResource 指定给无法解析的键时,会在运行时抛出 XAML 解析异常。 设计工具也可能提供警告或错误。
在 Windows 运行时 XAML 处理器实现中,StaticResource 功能没有后备类表示。 StaticResource 专门用于 XAML。 代码中最接近的等效项是使用 ResourceDictionary 的集合 API,例如调用 Contains 或 TryGetValue。
{ThemeResource} 标记扩展 是引用其他位置中命名资源的类似标记扩展。 区别在于,{ThemeResource} 标记扩展能够返回不同的资源,具体取决于处于活动状态的系统主题。 有关详细信息,请参阅 {ThemeResource} 标记扩展。
StaticResource 是标记扩展。 当需要转义属性值,使其不只是字面量值或处理程序名称时,会通常实现标记扩展,因为这种需求不仅仅限于将类型转换器应用于某些类型或属性,而是更为广泛。 XAML 中的所有标记扩展在其属性语法中使用“{”和“}”字符,这是 XAML 处理器识别标记扩展必须处理该属性的约定。
示例 {StaticResource} 用法
此示例 XAML 取自 XAML 数据绑定示例。
<StackPanel Margin="5">
<!-- Add converter as a resource to reference it from a Binding. -->
<StackPanel.Resources>
<local:S2Formatter x:Key="GradeConverter"/>
</StackPanel.Resources>
<TextBlock Style="{StaticResource BasicTextStyle}" Text="Percent grade:" Margin="5" />
<Slider x:Name="sliderValueConverter" Minimum="1" Maximum="100" Value="70" Margin="5"/>
<TextBlock Style="{StaticResource BasicTextStyle}" Text="Letter grade:" Margin="5"/>
<TextBox x:Name="tbValueConverterDataBound"
Text="{Binding ElementName=sliderValueConverter, Path=Value, Mode=OneWay,
Converter={StaticResource GradeConverter}}" Margin="5" Width="150"/>
</StackPanel>
此特定示例创建由自定义类支持的对象,并将其创建为 ResourceDictionary 中的资源。 若要成为有效的资源,此 local:S2Formatter 元素还必须具有 x:Key 属性值。 特性的值设置为“GradeConverter”。
然后,在XAML中稍微再往前一点的地方请求该资源,在那里可以看到{StaticResource GradeConverter}。
请注意 {StaticResource} 标记扩展用法如何设置另一个标记扩展 {Binding} 标记扩展的属性,因此此处有两个嵌套标记扩展用法。 首先计算内部的资源,以便先获取它,并将其用作一个值。 {Binding} 标记扩展中也显示了同一示例。
{StaticResource} 标记扩展的设计时工具支持
在 XAML 页面中使用 {StaticResource} 标记扩展时,Microsoft Visual Studio 可以在 Microsoft IntelliSense 下拉列表中显示可能的键值。 例如,键入“{StaticResource”后,当前查找范围中的任何资源键就会显示在 IntelliSense 下拉列表中。 除了在页面级别(FrameworkElement.Resources)和应用级别(Application.Resources)上拥有的典型资源,还会看到 XAML 主题资源以及项目正在使用的任何扩展中的资源。
资源键作为任何 {StaticResource} 用法的一部分存在后, Go To Definition (F12) 功能可以解析该资源,并向你显示定义资源的字典。 对于主题资源,这将转到 generic.xaml 进行设计。