代码之家  ›  专栏  ›  技术社区  ›  DaveB

Silverlight中样式位置的最佳实践

  •  11
  • DaveB  · 技术社区  · 15 年前

    放置StyleStaticResources的最佳位置在哪里?我在app.xaml中放置了全局和默认样式,在page_name.xaml中放置了特定于页面的样式。每个控件都应该有自己的StyleStaticResource吗?是否可以在控件中正确放置一些样式属性?我有一个页面上有5个文本框,当唯一的区别是宽度或最大长度属性时,是否应该为每个页面都有一个样式?还是应该用每个文本框的公共属性定义一个样式,并在控制元素中定义特定的样式属性?

    4 回复  |  直到 15 年前
        1
  •  10
  •   Jeff Wilcox    15 年前

    等级制度的存在是有原因的,最好是 从简单的、本地的元素开始。 ,然后根据需要将其移出。

    你的设计师也可能有比这更重要的特殊要求。例如,在某些样式上发送许多修订的团队可能希望将所有样式工作包含到单个XAML文件中,直到它准备好进行更多操作为止。

    按相反顺序排列的典型样式层次

    前几个项目是你最“烘焙”和最常用的风格,通常你会想从底部开始,一路向上。最好不要使用多个XAML文件,并将其保持在包含状态。

    应用程序级别 (APP.XAML)

    应用程序级别的样式在你的应用程序的任何地方都会很有用,因为它的界面暴露在公共元素中。

    如果您使用的是Silverlight2,这是使您的风格在整个应用程序中都可访问的最佳非黑客方法。

    如果经常使用app.xaml资源,请小心,因为居住在应用程序外部的单元测试库将更难测试,因为在某些情况下,它无法获取应用程序的应用程序级样式。

    合并词典

    合并的资源字典允许您将样式拆分为其他XAML文件,从而可以方便地按功能区、功能、控件类型、工作组名称等对其进行因子分析。 Learn about this feature .

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

    不适用于Silverlight 2,此功能已添加到Silverlight 3中。

    页面级

    任何特定于一个页面(可能是一个完整的应用程序,或者一个可视页面,或者应用程序的一部分)而不超出边缘的东西都是很好的选择。

    您可以从可视化树(如控制级别)的下方开始,并根据需要向上移动这些样式。

    在面板上

    很好地包含一堆类似的片段,比如格式化表单时。

    在控制之下

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

    这是属性设置和实际成为真正的样式资源之间的中间步骤,sine它将只是控件的样式属性的设置器-但您可以轻松地添加x:键,并在准备就绪后将其在可视化树中向上移动。

    隐式风格和主题

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

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

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

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

    一旦有几个(比如3个元素)使用相同的值,就可以将其拉出,然后开始使用style=“staticresource 凯纳姆 }“属性”。但是,如果您手工输入xaml,这比输入width=“20”要麻烦得多。

        2
  •  3
  •   Gordon Mackie JoanMiro    15 年前

    很抱歉插上了我自己的东西(或者如果这样是不允许/不允许的话),但是我很快就开始写博客,讲述了不久前我在一个大型的Silverlight2(即没有MergedDictionaries)项目中重组资源的经历。邮政是 here .

        3
  •  0
  •   Nick Gotch    15 年前

    我正在处理的Silverlight项目使用了来自MS的RIA业务应用程序模板。它在“assets”文件夹中具有所有样式,该文件称为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
  •  0
  •   Simon D.    15 年前

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

    我个人在一个resource.xaml中收集所有“通用”样式(用于文本框、组合框等)。我在附加的XAML资源字典中分离样式,只是为了某种目的我可能希望排除它们。例如,我将来自第三方供应商的组件样式放入单独的资源文件s.th中。我可以在应用程序中“独立”加载我的公共资源文件,它不引用第三方库。类似地,我将特定于项目的样式(适合客户公司标识的颜色)与全局样式(独立于客户的产品样式)分开,这与类继承应该遵循的准则非常相似。 然后,我的应用程序加载所有资源,S.T.用户控件不需要知道这些资源。

    推荐文章