【问题标题】:What are the pros and cons of Resource Dictionaries versus User Controls for organizing large xaml files?资源字典与用户控件在组织大型 xaml 文件方面的优缺点是什么?
【发布时间】:2011-06-25 19:45:35
【问题描述】:

我知道有许多问题表明资源字典和用户控件都可用于分解和组织大型 xaml 文件,但似乎没有一个问题涉及使用 on 的优缺点。

我的问题是使用资源字典与用户控件来组织大型 xaml 文件的优缺点是什么?

【问题讨论】:

    标签: .net wpf xaml


    【解决方案1】:

    我的经验法则:将 ResourceDictionaries 用于 DataTemplates、ControlTemplates、Style 和 ValueConverters、TemplateSelectors 等,以及 UserControls 将您的大视图(视觉元素)“切割”成碎片,所有这些都使用您的 ResourceDictionaries 进行样式设置。

    ResourceDictionaries 的问题在于,如果你将一个可视元素放在那里,你只能使用它一次,因为它是在资源中实例化的,所以你会得到一个“可视元素只能有一个父级”的异常类型如果您在不同的视觉控件中使用它两次。另一方面,DataTemplates、Styles 和 ControlTemplates 作为工厂工作,许多控件可以同时使用它们——每个都有自己的实例化。 ValueConverters 和 TemplateSelectors(只是要小心改变它们内部的状态)可以被多个可视控件使用,因为它们本身不是可视的,这使得它们成为 ResourceDictionary 静态方法的完美候选者。

    希望这能澄清一点。

    【讨论】:

      【解决方案2】:

      在您想要封装行为的地方使用 UserControl(或自定义控件)。我所说的行为不仅仅是交互逻辑,例如具有自定义双击行为的列表框,还包括数据模型,例如显示人员详细信息的控件,因此需要 PersonToDisplay 属性。特定于该 UserControl 的资源将进入控件的 Resources 字典。

      在您想要共享资源的地方使用 ResourceDictionary。例如,如果您有一组要在多个位置使用的画笔(并且希望有一个中心位置来更新它们),那么这将是 ResourceDictionary 的候选对象。

      有些情况可以完全使用资源来实现,但您可能希望将它们打包为控件,以便在使用时更容易理解。例如,如果您有一个样式为在鼠标悬停时闪烁的按钮,您可能会觉得用户编写(和阅读)<local:AnnoyingButton /> 而不是<Button Style="{StaticResource AnnoyingButton}" />(样式位于@ 987654323@ 资源字典),尽管整个事情实际上可以使用模板和触发器完成,而没有实际代码。在这里,我倾向于在创建控件方面犯错,因为 (a) 如果我发现以后需要添加代码,它会更加健壮,并且 (b) 它使我不必编写 ResourceDictionary.MergedDictionaries 元素。虽然这是一个判断电话。

      【讨论】:

        猜你喜欢
        • 2018-10-28
        • 1970-01-01
        • 2019-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多