WPF中的StaticResources和DynamicResources有什么区别?

Jas*_*wal 3 c# wpf resources wpf-controls

WPF中的StaticResources和DynamicResources有什么区别?

编辑:XAML文件中的此代码:

<ComboBox Canvas.Left="14" Style="{StaticResource ComboBoxStyle}"
          Canvas.Top="137" Height="33" Name="cmbItem" Width="170"
          SelectionChanged="cmbItem_SelectionChanged">
    <ComboBoxItem>Name</ComboBoxItem>
    <ComboBoxItem>Age</ComboBoxItem>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)

下面的代码在资源字典文件中

<Style x:Key="ComboBoxStyle" TargetType="{x:Type ComboBox}">

    <Setter Property="FocusVisualStyle" Value="{StaticResource ComboBoxFocusVisual}"/>

    <Setter Property="Foreground" Value="#FF436B13"/>
</Style>
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

使用它们时会评估动态资源.在加载时评估静态资源.

来自MSDN:

使用标记扩展时,通常以字符串形式提供一个或多个由特定标记扩展处理的参数,而不是在要设置的属性的上下文中进行计算.StaticResource标记扩展通过在所有可用资源字典中查找该键的值来处理密钥.这在加载期间发生,这是加载过程需要分配采用静态资源引用的属性值的时间点.相反,DynamicResource标记扩展通过创建表达式来处理键,并且该表达式在实际运行应用程序之前保持未评估状态,此时表达式将被计算并提供值.

关于何时应该选择哪个选项,有更多细节.