一. 样式
控件的Style属性可以赋予附带Setter的Style元素。Setter元素定义Property和Value属性,并给指定的属性设置一个值。比如设置Background、FonSize和 FontWeight属性。把style属性设置为TargetType Button,以便直接访问Button的属性。如果没有设置样式TargetType,就可以通过Button.Background、Button.FontSize访问属性。如果需要设置不同元素类型的属性,这就很重要。直接通过Button元素设置Style对样式的共享没有什么帮助。样式可以放在资源中。在资源中,可以把样式赋予指定的元素,把一个样式赋予某一类型的所有元素,或者为该样式使用一个键。要把样式赋予某一类型的所有元素,可使用Style的TargetType属性,指定x:Type标记扩展{x:Type Button},从而将样式赋予一个按钮。要定义需要的引用样式,必须设置x:Key。
在Xaml代码中,第一个按钮没有用元素属性定义样式,而是使用为Button类型定义的样式。对于下一个按钮,把Style属性用StaticResource标记扩展设置为{StaticResource ButtonStyle},而ButtonStyle指定了前面定义的样式资源的键值,所以该按钮的背景为红色,前景是白色.
<Button width=”200”Content=”User namd style”Style=”{ StaticResource ButtonStyle }”Margin=5/>
出除了按钮的Background设置为单个值之外,还可以将Background属性设置为定义了渐变色的LinearGradientBrush。
二.资源
资源是可以在应用程序的不同位置重用的对象。XAML资源的示例包括画笔和样式。可以将资源引用为动态资源和静态资源。这可以通过 使用StaticResource标记扩展或DynamicResource标记扩展来实现。通过替换已定义资源的值,StaticResource为属性提供了一个值,DynamicResource将属性值延迟为资源的运行时引用,从而为属性提供一个值。动态资源引用在每次访问此类资源并在运行时访问对象图时强制执行新的查找。为了获得这种访问,WPF属性系统中的依赖属性支持DynamicResource概念,并计算表达式。
系统资源还有一些系统范围内的颜色和字体资源,它们可用于所有应用程序。这些资源用SystemColors、SystemFonts SystemParameters 类定义。使用SystemColors类可以获得边框、控件、桌面和窗口的颜色设置,例如,ActiveBorderColor、ControlBrush、 DesktopColor. WindowColor WindowBrush 等。SystemFonts类返回菜单、状态栏、消息框等的字体设置,例如, CaptionFont、DialogFont、MenuFont、 MessageBoxFont 和 StatusFont等。SystemParameters类设置菜单按钮、光标、图标、边框、标题、时间信息、键盘设置的大小。例如, BorderWidth、 CaptionHeight. CaptionWidth、 MenuButtonWidth. MenuPopupAnimation,MenuShowDelay, SmalllconHeight 和 Smalllcon Width 等。
如果相同的资源可用于不同的应用程序,把资源放在一个资源字典中就比较有效。使用资源字典,可以在多个应用程序之间共享文件,也可以把资源字典放在一个程序集中,供应用程序共享。要共享程序集中的资源字典,应创建一个库。可以把资源字典文件(这里是Dictionaryl.xaml)添加到程序集中。这个文件的构建动作必须设置为Resource,从而把它作为资源添加到程序集中。Dictionary1.xaml 定义了两个资源:一个是包含CyanGradientBrush 键的LinearGradientBrush;另一个是用于按钮的样式,它可以通过PinkButtonStyle键来引用。
如果想用代码创建一个完整的WPF应用程序,且可能还想用代码在该应用程序中创建任何资源。为此,创建一个新的ResourceDictionary实例,然后使用对ResourceDictionary.add .的连续调用将所有资源添加到字典中。然后,使用由此创建的ResourceDictionary在页面范围或Application.Resources中出现的元素上设置Resources属性。还可以将ResourceDictionary作为独立对象维护,而不需要将其添加到元素中。但是,如果您这样做,您必须按项目键访问其中的资源,就好像它是一个通用字典一样。资源字典中的每个资源必须有一个惟一的键。在标记中定义资源时,通过x: key指令分配惟一的键。通常,键是字符串;但是,你也可以通过使用适当的标记扩展将其设置为其他对象类型。定义资源之后,可以使用指定键名的资源标记扩展语法引用要用于属性值的资源。