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>
下面的代码在资源字典文件
中<Style x:Key="ComboBoxStyle" TargetType="{x:Type ComboBox}">
<Setter Property="FocusVisualStyle" Value="{StaticResource ComboBoxFocusVisual}"/>
<Setter Property="Foreground" Value="#FF436B13"/>
</Style>
答案 0 :(得分:6)
使用动态资源时会对其进行评估。静态资源在加载时进行评估。
来自MSDN:
当您使用标记扩展时,您 通常提供一个或多个 字符串形式的参数 由特定标记处理 扩展,而不是被评估 在财产的背景下 组。 StaticResource标记 扩展通过查看处理密钥 在所有中增加该键的值 可用的资源词典。这个 在加载期间发生,这是 加载过程中的时间点 需要分配属性值 采用静态资源 参考。 DynamicResource标记 而是通过扩展来处理密钥 创造一个表达,然后 表达仍然没有评估,直到 该应用程序实际上是在运行 哪个时候评估表达式 并提供一个价值。
关于何时应该选择哪个选项,还有更多细节。
答案 1 :(得分:2)
以下评论中Jon的回答:
我收到此错误“无法找到名为'{ComboBoxFocusVisual}'的资源。资源名称区分大小写。标记文件中对象'cmbItem'出错”
我认为您的ComboBoxFocusVisual资源是在ComboBoxStyle之后声明的,因此StaticResource
扩展程序无法找到它。您应该在引用之前声明它,或者使用DynamicResource
扩展名