问题 Silverlight中样式位置的最佳实践


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


2883
2017-07-31 03:07


起源



答案:


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

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

逆序的典型样式层次结构

前几个项目是您“最热门”和最常用的样式,通常您需要从底部开始并逐步完成。很高兴不必使用多个XAML文件,并保持包含。

应用级 (App.xaml中)

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

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

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

合并字典

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

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

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

页面级

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

随意从可视树(例如控制级别)开始,并在有意义的时候将这些样式移动。

小组

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

在控制

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

这是属性设置和实际上是真正的样式资源之间的中间步骤,正弦它只是控件的Style属性的setter - 但是你可以轻松地添加一个x:Key并在可视化树中移动它你准备好了。

隐含的风格和主题

如果您的团队或公司为某种类型的所有控件使用常规样式集(Buttons,CheckBoxes,您可以命名),请考虑使用Implicit Style Manager功能(Silverlight的值添加)来执行隐式样式。这类似于WPF样式故事,您无需在使用它的所有位置设置样式。

我在网上找到了一个很好的教程,快速搜索到你 了解有关ISM的更多信息

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

W.R.T.你的问题是,如果你有一组文本框,其中差异是MaxLength,Width等,你应该在每个控件实例上明确地将它们设置为属性 - 如果它们不同的话。

一旦你有几个(比方说,3个元素)使用相同的值,它可能是有意义的拉出然后开始使用Style =“{StaticResource 的keyName}“属性。但是,如果你手动输入XAML,那比输入Width =”20“要烦人得多。


10
2017-08-05 19:36





很抱歉插入我自己的东西(或者如果它不被允许/在SO中不赞成),但我快速去博客关于我在一段时间内重新组织大型Silverlight 2(即没有MergedDictionaries)项目中的资源的经验。邮寄是 这里


3
2017-07-31 15:32





我正在开发的Silverlight项目使用了MS的RIA Business Application模板。它的所有样式都在'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


0
2017-07-31 14:21





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

我个人在一个resource.xaml中收集所有“常见”样式(用于文本框,组合框等)。只有在我出于某种目的排除它们时,我才会在其他xaml-resource-dictionaries中分隔样式。例如,我将第三方供应商的组件样式放入单独的资源文件中,s。我可以在应用程序中加载我的公共资源文件“standalone”,它不会引用这个第三方库。同样,我从全局样式(客户独立的产品样式)中分离出特定于项目的样式(颜色适合客户的企业标识),非常类似于应该保留类继承的准则。 我的应用程序然后加载所有资源,s.t。用户控件不需要知道它们。


0
2017-08-04 11:06