代码之家  ›  专栏  ›  技术社区  ›  Jaswant Agarwal

在WPF中静态资源和动态资源有什么区别?

  •  3
  • Jaswant Agarwal  · 技术社区  · 15 年前

    在WPF中静态资源和动态资源有什么区别?

    编辑: 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>
    
    2 回复  |  直到 13 年前
        1
  •  6
  •   Jon Skeet    15 年前

    使用动态资源时会对其进行评估。静态资源在加载时进行评估。

    MSDN :

    使用标记扩展时, 通常提供一个或多个 字符串形式的参数 由该特定标记处理 扩展,而不是评估 在财产存在的情况下 集合。StaticResource标记 扩展通过查找 把那个钥匙的价值全部提高 可用资源字典。这个 在加载过程中发生,这是 加载过程中的时间点 需要分配属性值 占用静态资源 参考文献。动态源标记 扩展处理键的方式 创建一个表达式, 直到 应用程序实际运行于 表达式的计算时间 并提供一个值。

    关于什么时候应该选择哪个选项,这里有很多细节。

        2
  •  2
  •   Thomas Levesque    15 年前

    从Jon回答下面的评论中:

    出现此错误“找不到名为“ComboBoxFocusVisual”的资源。资源名称区分大小写。标记文件中的对象“cmbitem”出错“

    我认为您的ComboBoxFocusVisual资源是在ComboBoxStyle之后声明的,因此 StaticResource 分机找不到。您应该在引用它之前声明它,或者用 DynamicResource 延伸