【问题标题】:Best Practice For Location Of Styles In SilverlightSilverlight 中样式位置的最佳实践
【发布时间】:2009-07-31 03:07:16
【问题描述】:

放置 Style StaticResources 的最佳位置在哪里?我一直将全局和默认样式放在 app.xaml 中,将页面特定样式放在 page_name.xaml 中。每个控件都应该有自己的样式 StaticResource 吗?将一些样式属性放在控件中是否可以接受?我有一个页面,上面有 5 个文本框,当唯一的区别是 Width 或 MaxLength 属性时,每个文本框是否应该有一个样式?还是应该使用每个 TextBox 的公共属性定义一种样式,并在控件元素中定义特定的样式属性?

【问题讨论】:

    标签: silverlight silverlight-3.0 silverlight-2.0


    【解决方案1】:

    层次结构的存在是有原因的,从你正在使用的元素开始简单并本地化可能是个好主意,然后在必要时将其移出。

    您的设计师也可能有特殊要求,这可能胜过这一点。例如,对某些样式发送许多修订的团队可能希望将所有样式工作包含到单个 XAML 文件中,直到它准备好更多。

    倒序的典型样式层次结构

    前几项是您“最经典”和最常用的样式,通常您会希望从底部开始,然后逐步向上。不必同时处理多个 XAML 文件并保持其包含,这很好。

    应用程序级 (App.xaml)

    应用级样式将在您的应用暴露其界面的任何地方都非常有用,用于常见元素。

    如果您使用的是 Silverlight 2,这是让您的样式在整个应用程序中可访问的最佳非黑客方法。

    如果经常使用 App.xaml 资源,请务必小心,因为在您的应用之外的单元测试库将更难以测试,因为它在某些情况下不会获取您应用的应用级样式。

    合并字典

    合并的资源字典允许您将样式拆分为其他 XAML 文件,从而可以轻松地按功能区域、功能、控件类型、团队名称等进行分解。Learn about this feature

    考虑在有意义的情况下将其用于应用级样式,因为您可以在单独的项目和解决方案中使用它们。

    不适用于 Silverlight 2,此功能是在 Silverlight 3 中添加的。

    页面级

    任何特定于单个页面(可能是完整的应用程序、可视页面或应用程序的一部分)且不会超出边缘的内容都是很好的候选对象。

    随意从可视化树的下方开始(例如控件级别),并根据需要将这些样式向上移动。

    小组讨论

    最好包含一堆相似的部分,比如格式化表格时。

    在控制中

    从这里开始。当您在 Blend 中设置控件样式时,它通常会从这里开始,除非您选择应用程序范围的资源选项。

    这是属性设置和真正成为真正的样式资源之间的中间步骤,因为它只是控件的 Style 属性的设置器 - 但您可以轻松添加 x:Key 并将其移动到准备好后的可视化树。

    隐式样式和主题

    如果您的团队或公司对特定类型的所有控件(按钮、复选框,等等)使用一组常规样式,请考虑使用隐式样式管理器功能(Silverlight 的增值功能)来执行隐式样式.这类似于 WPF 样式故事,您不需要在所有使用它的地方设置样式。

    我在网上找到了一个很好的教程,你可以快速搜索到learn more about ISM

    何时使用属性而不是共享的通用样式

    W.R.T.您的问题,如果您有一组文本框,其中差异是 MaxLength、Width 等,您可能应该将它们显式设置为每个控件实例的属性 - 如果它们不同。

    一旦您有几个(比如 3 个元素)使用相同的值,将其拉出然后开始使用 Style="{StaticResource keyName}" 属性可能是有意义的.但是,如果您手动输入 XAML,这比输入 Width="20" 更烦人。

    【讨论】:

      【解决方案2】:

      很抱歉插入我自己的东西(或者如果它在 SO 中不允许/不赞成),但我很快就写了一篇关于我在大型 Silverlight 2(即没有 MergedDictionaries)项目中重组资源的经验的博客一会儿回来。帖子是here

      【讨论】:

        【解决方案3】:

        我正在进行的 Silverlight 项目使用了来自 MS 的 RIA 业务应用程序模板。它在“资产”文件夹中包含所有样式,该文件称为 Styles.xaml。我一直坚持他们的组织并喜欢它,尽管我还为“对话框”和自定义“控件”添加了单独的文件夹。

        您可以在此处下载他们的示例,这可能会回答您的问题: http://blogs.msdn.com/brada/archive/2009/07/10/amazing-business-apps-example-updated-for-silverlight-3-rtm-and-net-ria-services-july-update.aspx

        【讨论】:

          【解决方案4】:

          我同意您的最后一个建议:将所有文本框的公共部分放入样式字典中,然后可以由应用程序/页面/控件加载,具体取决于共享该公共部分的级别。 恕我直言,非公共部分应直接在文本框实例中设置,除非您在多个文本框中重复使用此特殊设置,否则无法使用其他样式。

          我个人将所有“常见”样式(用于文本框、组合框等)收集在单个 resource.xaml 中。仅当我出于某种目的而希望排除它们时,我才会在其他 xaml-resource-dictionaries 中分离样式。例如,我将来自 3rd-party-vendors 的组件样式放入单独的资源文件 s.th 中。我可以在不引用此 3rd-party-lib 的应用程序中加载我的公共资源文件“独立”。同样,我将特定于项目的样式(适合客户企业形象的颜色)与全局样式(客户独立的产品样式)分开,这与类继承应遵循的准则非常相似。 然后我的应用程序加载所有资源,s.t.用户控件不需要知道它们。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-08-19
            • 2011-08-06
            • 2020-03-17
            • 1970-01-01
            • 1970-01-01
            • 2011-12-08
            • 2017-09-05
            相关资源
            最近更新 更多