- StaticResource使用第一个值。DynamicResource使用最后一个值。
- DynamicResource可以用于嵌套样式,StaticResource不能。
假设您有此嵌套样式字典。浅绿色位于根级别,而粉红色嵌套在网格内。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="{x:Type Grid}">
<Style.Resources>
<Style TargetType="{x:Type Button}" x:Key="ConflictButton">
<Setter Property="Background" Value="Pink"/>
</Style>
</Style.Resources>
</Style>
<Style TargetType="{x:Type Button}" x:Key="ConflictButton">
<Setter Property="Background" Value="LightGreen"/>
</Style>
</ResourceDictionary>
鉴于:
<Window x:Class="WpfStyleDemo.ConflictingStyleWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ConflictingStyleWindow" Height="100" Width="100">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles/ConflictingStyle.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Button Style="{DynamicResource ConflictButton}" Content="Test"/>
</Grid>
</Window>
StaticResource会将按钮呈现为LightGreen,这是它在样式中找到的第一个值。在渲染网格时,DynamicResource将替代LightGreen按钮为Pink。
静态资源
动态资源
请记住,VS Designer将DynamicResource视为StaticResource。它将获得第一价值。在这种情况下,VS Designer会将按钮渲染为浅绿色,尽管实际上最终会变成粉红色。
删除根级别样式(LightGreen)时,StaticResource将引发错误。