【问题标题】:What is the difference between StaticResources and DynamicResources in WPF?WPF中的StaticResources和DynamicResources有什么区别?
【发布时间】:2009-09-14 09:12:10
【问题描述】:

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>

【问题讨论】:

    标签: c# wpf resources wpf-controls


    【解决方案1】:

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

    来自MSDN

    当您使用标记扩展时,您 通常提供一个或多个 字符串形式的参数是 由该特定标记处理 扩展,而不是被评估 在财产的背景下 放。静态资源标记 扩展通过查找来处理密钥 全部提高该键的值 可用的资源字典。这 在加载过程中发生,这是 加载过程的时间点 需要分配属性值 需要静态资源 参考。动态资源标记 扩展程序改为通过 创建一个表达式,然后 表达式保持未计算,直到 应用程序实际运行,在 表达式的计算时间 并提供一个值。

    那里有更多关于何时应该选择哪个选项的详细信息。

    【讨论】:

    • 我收到此错误“找不到名为'{ComboBoxFocusVisual}'的资源。资源名称区分大小写。标记文件中的对象'cmbItem'出错”请提出解决方案..
    • XAML 文件中的此代码 NameAge 下面的代码在资源字典文件
    • 我将代码添加到原始帖子中,以便更容易阅读......但我在该代码的任何地方都没有看到“ComboBoxFocusVisual”
    • ResourceDictionary 代码为..原始帖子在哪里?
    【解决方案2】:

    来自 Jon 的回答下方的评论:

    我收到此错误“找不到名为'{ComboBoxFocusVisual}'的资源。资源名称区分大小写。标记文件中的对象'cmbItem'出错”

    我认为您的 ComboBoxFocusVisual 资源是在 ComboBoxStyle 之后声明的,因此 StaticResource 扩展找不到它。您应该在引用它之前声明它,或者使用 DynamicResource 扩展名来引用它

    【讨论】:

    • 我已经看过编辑过的帖子,但我的答案还是一样...我告诉过你要改变什么。有什么不明白的地方吗?
    猜你喜欢
    • 2012-09-04
    • 1970-01-01
    • 2010-09-17
    • 2011-01-25
    • 2011-05-18
    • 2010-10-11
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多