放置Style StaticResources的最佳位置在哪里?我一直将app.xaml中的全局和默认样式以及page_name.xaml中的页面特定样式放在中。每个控件都应该有自己的样式StaticResource吗?在控件中放置一些样式属性是否可以接受?我有一个包含5个TextBox的页面,如果唯一的区别是Width或MaxLength属性,是否应该有每个样式?或者是否应使用每个TextBox的公共属性定义一个样式,并在控件元素中定义特定的样式属性?
答案 0 :(得分:10)
层次结构存在是有原因的,开始简单,并且使用的元素本地化可能是个好主意,然后在必要时将其移出。
您的设计师也可能有特殊要求可能胜过此。例如,在某些样式上发送许多修订的团队可能希望将所有样式工作包含到单个XAML文件中,直到它准备好了更多。
前几个项目是您“最热门”和最常用的样式,通常您需要从底部开始并逐步完成。很高兴不必使用多个XAML文件,并保持包含。
应用程序级(App.xaml)
对于常见元素,应用级样式在应用程序的界面暴露的任何地方都会很有用。
如果您使用的是Silverlight 2,那么这是您在整个应用中可以访问样式的最佳非黑客方法。
如果经常使用App.xaml资源,请小心,因为生活在应用程序之外的单元测试库将更难以测试,因为在某些情况下它不会获取应用程序的应用程序级样式。 / p>
合并字典
合并资源字典允许您将样式拆分为其他XAML文件,从而可以轻松地按功能区域,功能,控件类型,团队名称等对它们进行分析。Learn about this feature。
在有意义的情况下考虑将此用于app级别的样式,因为您可以在单独的项目和解决方案中使用它们。
不适用于Silverlight 2,Silverlight 3中添加了此功能。
网页级别强>
任何特定于单个页面的内容(可能是完整的应用程序,或可视化页面,或应用程序的一部分)都不会超出边缘,这是一个很好的选择。
随意从可视树(例如控制级别)开始,然后在有意义的时候将这些样式移动。
在专家组
很好地包含一堆相似的部分,例如格式化表单时。
在控件
从这里开始。在Blend中设置控件样式时,它通常从此处开始,除非您选择应用程序范围的资源选项。
这是属性设置和实际上是真正的样式资源之间的中间步骤,正弦它只是控件的Style属性的setter - 但是你可以轻松地添加一个x:Key并将其移动到准备就绪时的视觉树。
隐含的样式和主题
如果您的团队或公司为某种类型的所有控件使用常规样式集(Buttons,CheckBoxes,您可以命名),请考虑使用Implicit Style Manager功能(Silverlight的增值)来执行隐式样式。这类似于WPF样式故事,您无需在使用它的所有地方设置样式。
我在线找到了一个很好的教程,快速搜索到learn more about ISM。
W.R.T。你的问题,如果你有一组文本框,其差异是MaxLength,Width等,你应该在每个控件实例上明确地将它们设置为属性 - 如果它们不同。
一旦你有一些(比方说,3个元素)使用相同的值,将它拉出然后开始使用Style =“{StaticResource keyName }”属性可能是有意义的。但是,如果您手动输入XAML,那比输入Width =“20”要烦人得多。
答案 1 :(得分:3)
很抱歉插入我自己的东西(或者在SO中不允许/不赞成),但我快速浏览了一下我在大型Silverlight 2(即没有MergedDictionaries)项目中重新组织资源的经历一会儿回来。帖子是here。
答案 2 :(得分:0)
我正在开发的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
答案 3 :(得分:0)
我同意你的最后一个建议:将所有文本框的公共部分放入样式字典中,然后可以由应用程序/页面/控件加载,具体取决于共享此公共部分的级别。 非公共部分应直接在文本框实例中设置,除非您在多个文本框中重复使用此特殊设置,否则不能使用其他样式。
我个人在一个resource.xaml中收集所有“常见”样式(用于文本框,组合框等)。只有在我出于某种目的排除它们时,我才会在其他xaml-resource-dictionaries中分隔样式。例如,我将第三方供应商的组件样式放入单独的资源文件中。我可以在应用程序中加载我的公共资源文件“standalone”,它不会引用这个第三方库。同样,我从全局样式(客户独立的产品样式)中分离出特定于项目的样式(适合客户公司标识的颜色),非常类似于应该保留类继承的准则。 我的应用程序然后加载所有资源,s.t。用户控件不需要了解它们。