Silverlight中样式的最佳位置实践

11

最佳放置Style StaticResources的地方在哪里?我一直将全局和默认样式放在app.xaml文件中,将页面特定样式放在page_name.xaml文件中。每个控件都需要有自己的Style StaticResource吗?把一些样式属性直接放在控件中是可以接受的吗?我有一个页面上有5个文本框,当唯一的区别是宽度或MaxLength属性时,是否应该为每个文本框定义一个样式?还是应该定义一个具有通用属性的样式,将特定的样式属性定义在控件元素中?

4个回答

10

典型样式层次结构(倒序)

前几个样式是你的“最基础”和最常用的,通常你会想从下往上开始。也不要使用多个XAML文件,保持它的统一性。

应用层级(App.xaml)

应用级别的样式将在整个应用程序的界面中使用到,适用于通用元素。

如果你正在使用Silverlight 2,则这是您使样式在应用程序中普及的非黑客方法。

请小心经常使用App.xaml资源,因为位于应用程序之外的单元测试库在某些情况下不会获取到应用程序的应用级别样式,这将导致测试变得更加困难。

合并字典

合并资源字典允许您将样式拆分成其他XAML文件,方便地按功能区域、特性、控件类型、团队名称等进行组织。了解此功能

考虑在适当的情况下使用此功能进行应用级别样式的管理,因为然后您可以将它们用于不同的项目和解决方案。

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

页面级别

任何仅适用于单个页面(可能是完整的应用程序、可视页面或应用程序的一部分)且不会影响到边缘以外的内容都是这种样式的好选择。

层次结构存在的原因是值得的,因此开始时最好从简单且局限于你正在处理的元素开始,然后随着需要而逐步扩展它们的范围。

您的设计师可能还有特殊需求,例如,发送许多样式版本的团队可能希望将所有样式工作都放在一个XAML文件中,直到准备好进行更改为止。

可以从更深层次的视觉树(例如控件级别)开始,并在有意义的情况下将这些样式向上移动。

在面板中

可以用于包含一组相似的元素,例如格式化表单时。

在控件中

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

这是属性设置和真正成为样式资源之间的中间步骤,因为它只是控件的Style属性的Setter,但是您可以轻松地添加一个x:Key并将其上移到视觉树中。

隐式样式和主题

如果您的团队或公司针对某种类型的所有控件(如按钮、复选框等)使用常规样式集,请考虑使用隐式样式管理器功能(Silverlight的附加值)执行隐式样式。这类似于WPF的样式故事,在那里您不需要在使用它的所有位置设置样式。

我找到了一个很好的在线教程,可以通过单击此处了解更多ISM的信息。

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

关于您的问题,如果您有一组文本框,其中差异在于MaxLength、Width等,则应该在每个控件实例上显式设置这些属性-如果它们不同的话。

一旦您有了几个(假设有3个元素)使用相同的值,那么将其拿出来并开始使用Style="{StaticResource keyName}" 属性可能会更好。不过,如果您手动输入XAML,那就比输入Width="20"麻烦得多。


3

很抱歉打广告(如果在SO上不允许/不被赞同),但我曾经尝试过博客记录我重新组织大型Silverlight 2项目资源的经验(即没有MergedDictionaries)。这篇文章在这里


0

我正在处理的Silverlight项目使用了MS的RIA Business Application模板。所有的样式都在一个名为'assets'的文件夹中,文件名为Styles.xaml。我一直遵循他们的组织方式并且很喜欢它,虽然我也添加了"dialogs"和自定义"controls"的单独文件夹。

您可以从这里下载他们的示例,这可能会回答您的问题: 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


0

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

我个人将所有“常见”样式(例如文本框、组合框等)收集到单个resource.xaml中。我仅在其他xaml资源字典中分离样式,如果我希望出于某种目的排除它们。例如,我将来自第三方供应商的组件的样式放入单独的资源文件中,这样我就可以在不引用此第三方库的应用程序中“独立”加载我的公共资源文件。类似地,我将项目特定的样式(适合客户企业标识的颜色)与全局样式(客户无关的产品样式)分开,这与应遵循的类继承指南非常相似。 然后,我的应用程序加载所有资源,以便用户控件不需要知道它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接