`
lovnet
  • 浏览: 6968177 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

wpf style入门

阅读更多

WPF中的Style(风格,样式)
周银辉

在WPF中我们可以使用Style来设置控件的某些属性值,并使该设置影响到指定范围内的所有该类控件或影响指定的某一控件,比如说我们想将窗口中的所有按钮都保持某一种风格,那么我们可以设置一个Style,而不必分别设置每个按钮的风格。

Style是作为一种资源被保存下来的. 看下面的例子:

<Window.Resources>
<StyleTargetType="Button">
<SetterProperty="Foreground"Value="Blue"/>
<SetterProperty="FontFamily"Value="CourierNew"/>
</Style>
</Window.Resources>

我们声明了一个Style,它被声明在Window.Resources中说明它的有效范围是当前窗体,TargetType="Button" 指示该Style的作用对象是Button类的实例,也就是说在当前窗体中的所有Button实例都将受到该Style的影响(除非某Button有明确地指明它所使用的是另外的Style)。
<SetterProperty="Foreground"Value="Blue"/> 这里的Setter是一个设置器,用来设置该Style要对TargetType的那些属性或对象进行设置,我们这里设置的是Button的Foreground属性,将其值设置为Blue,同理,我们将Button的FontFamily属性设置为CourierNew

这样一来,在默认情况下,被加载到窗口中的所有Button对象都将受到这个Style的影响,从而文本变成统一的蓝色CourierNew字体。
你可以粘贴以下代码到XamlPad中查看效果:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
Title
="StyleDemo"Height="417"Width="579"
>


<Window.Resources>
<StyleTargetType="Button">
<SetterProperty="Foreground"Value="Blue"/>
<SetterProperty="FontFamily"Value="CourierNew"/>
</Style>
</Window.Resources>


<GridShowGridLines="True">

<Grid.ColumnDefinitions>
<ColumnDefinitionWidth="50*"/>
<ColumnDefinitionWidth="50*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinitionHeight="25*"/>
<RowDefinitionHeight="25*"/>
<RowDefinitionHeight="25*"/>
</Grid.RowDefinitions>

<ButtonGrid.Column="0"Grid.ColumnSpan="1"Grid.Row="0"Grid.RowSpan="1">button1</Button>
<ButtonGrid.Column="2"Grid.ColumnSpan="1"Grid.Row="1"Grid.RowSpan="1">button2</Button>

</Grid>

</Window>


接下来很容易想到的一个问题是,想上述代码的强制窗口的所有按钮都受声明的Style的影响是不是有点民意,如果我只想我定义的Style影响指定的Button对象而不是所有的Button对象应该怎么办呢?
参考以下代码:我们为Style添加一个x:Key="ButtonStyle"

<Window.Resources>

<StyleTargetType="Button"x:Key="ButtonStyle">
<SetterProperty="Foreground"Value="Blue"/>
<SetterProperty="FontFamily"Value="CourierNew"/>
</Style>

</Window.Resources>

然后我们使用Button的Style属性来指定该Button所要使用的Style,而其他没有将我们声明的Style指定为其样式的按钮将不受到该Style的影响。

<Button>normalbutton</Button>
<ButtonStyle="{StaticResourceButtonStyle}">styledbutton</Button>

这样就很好的解决了Style强制影响每个Button的问题,你可以粘贴以下代码到XamlPad中查看效果:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
Title
="StyleDemo"Height="417"Width="579"
>


<Window.Resources>
<StyleTargetType="Button"x:Key="ButtonStyle">
<SetterProperty="Foreground"Value="Blue"/>
<SetterProperty="FontFamily"Value="CourierNew"/>
</Style>
</Window.Resources>


<GridShowGridLines="True">

<Grid.ColumnDefinitions>
<ColumnDefinitionWidth="50*"/>
<ColumnDefinitionWidth="50*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinitionHeight="25*"/>
<RowDefinitionHeight="25*"/>
<RowDefinitionHeight="25*"/>
</Grid.RowDefinitions>

<ButtonGrid.Column="0"Grid.ColumnSpan="1"Grid.Row="0"Grid.RowSpan="1">normalbutton</Button>
<ButtonGrid.Column="1"Grid.ColumnSpan="1"Grid.Row="1"Grid.RowSpan="1"Style="{StaticResourceButtonStyle}">styledbutton1</Button>
<ButtonGrid.Column="0"Grid.ColumnSpan="1"Grid.Row="2"Grid.RowSpan="1"Style="{StaticResourceButtonStyle}">styledbutton2</Button>

</Grid>

</Window>



为了让我们的Style对外界的交互做出外观上的相应,比如当鼠标按下时蓝色的文本变成红色,当鼠标松开时文本又恢复蓝色,我们可以在Style中添加Trigger(触发器),除此之外,与类的继承原理相类似,我们还可以使用BaseOn来使一个Style“继承”另一个Style。
参考以下代码:

<Window.Resources>

<StyleTargetType="Button"x:Key="ButtonStyle">
<SetterProperty="Foreground"Value="Blue"/>
<SetterProperty="FontFamily"Value="CourierNew"/>
</Style>

<StyleTargetType="Button"x:Key="TriggerButtonStyle"BasedOn="{StaticResourceButtonStyle}">
<Style.Triggers>
<TriggerProperty="IsPressed"Value="True">
<SetterProperty="Foreground"Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>

</Window.Resources>

我们所声明的第二个Style,即TriggerButtonStyle,它“继承”于ButtonStyle,那么TriggerButtonStyle将会从ButtonStyle那里得到蓝色CourierNew文本的性质。然后我们使用了Trigger来响应鼠标按下,<TriggerProperty="IsPressed"Value="True"> 表示当Button的IsPressed属性值变为True的时候,将做如下设置<SetterProperty="Foreground"Value="Red"/>,即将Button的Foreground属性设置为Red。这里有一个隐含的意思是:当当Button的IsPressed属性值变为False的时候,Foreground属性将恢复原值。
你可以粘贴以下代码到XamlPad中查看效果:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
Title
="StyleDemo"Height="417"Width="579"
>


<Window.Resources>

<StyleTargetType="Button"x:Key="ButtonStyle">
<SetterProperty="Foreground"Value="Blue"/>
<SetterProperty="FontFamily"Value="CourierNew"/>
</Style>

<StyleTargetType="Button"x:Key="TriggerButtonStyle"BasedOn="{StaticResourceButtonStyle}">
<Style.Triggers>
<TriggerProperty="IsPressed"Value="True">
<SetterProperty="Foreground"Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>

</Window.Resources>


<GridShowGridLines="True">

<Grid.ColumnDefinitions>
<ColumnDefinitionWidth="50*"/>
<ColumnDefinitionWidth="50*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinitionHeight="25*"/>
<RowDefinitionHeight="25*"/>
<RowDefinitionHeight="25*"/>
</Grid.RowDefinitions>

<ButtonGrid.Column="0"Grid.ColumnSpan="1"Grid.Row="0"Grid.RowSpan="1">normalbutton</Button>
<ButtonGrid.Column="1"Grid.ColumnSpan="1"Grid.Row="1"Grid.RowSpan="1"Style="{StaticResourceButtonStyle}">styledbutton</Button>
<ButtonGrid.Column="0"Grid.ColumnSpan="1"Grid.Row="2"Grid.RowSpan="1"Style="{StaticResourceTriggerButtonStyle}">triggerbutton</Button>

</Grid>

</Window>

分享到:
评论

相关推荐

    wpf控件入门demo

    **WPF(Windows Presentation ...通过学习和实践这个“WPF控件入门demo”,你可以掌握WPF的基本概念和技术,为创建自己的WPF应用程序打下坚实的基础。同时,它也将引导你熟悉MVVM模式,提高你开发现代桌面应用的能力。

    C# WPF 基础教程-2024

    本教程旨在为初学者提供一个全面的C# WPF入门指南。 ### 一、WPF概述 WPF是基于XAML(Extensible Application Markup Language)的,它允许开发者使用XML来声明性地定义用户界面。XAML提供了可视化设计和代码分离...

    WPF 基础视频教程(共50集)-3.只使用代码创建WPF应用程序

    **WPF基础视频教程——3.只使用代码创建WPF应用程序** Windows Presentation Foundation(WPF)是.NET Framework的一部分,用于构建具有丰富用户界面的应用程序。本教程将专注于使用C#编程语言,仅通过代码来创建...

    WPF项目入门必知必会基础--巩固和进阶必会 视频课程P1-P10

    在“WPF项目入门必知必会基础--巩固和进阶必会 视频课程P1-P10”这个课程中,我们将深入学习WPF的基础概念和技术,帮助新手快速上手。课程内容可能涵盖了以下关键知识点: 1. **XAML语言**:XAML是WPF的主要标记...

    WPF开发教程- 让你成为WPF高手

    **一、WPF基础入门** 1. **.NET Framework与WPF的关系**:WPF是.NET Framework 3.0引入的新一代UI框架,它构建在.NET Framework之上,提供了丰富的图形渲染、媒体支持和数据绑定能力。 2. **XAML语言**:XAML...

    WPF入门教程

    **WPF(Windows Presentation Foundation)入门教程** WPF,全称Windows Presentation Foundation,是微软.NET Framework框架中的一个重要组成部分,主要用于构建Windows桌面应用程序。它提供了一种全新的方式来...

    Wpf.zip_WPF

    这个压缩包文件“Wpf.zip”包含了一本名为“Wpf入门白皮书.pdf”的资源,这是一份针对初学者的WPF教程,旨在帮助读者快速理解和掌握WPF的基础知识。 WPF的核心设计理念是将应用程序的UI、数据、业务逻辑和资源进行...

    wpf基础视频教程

    本教程涵盖了WPF的基础知识和技术要点,旨在帮助初学者快速入门并掌握WPF的核心概念。通过学习这些内容,开发者可以更好地理解和利用WPF的强大功能,从而创建出更加丰富和交互式的Windows应用程序。

    WpfApplication1.zip_5CF_WPF_WPF计算器布局_wpf基础布局

    描述中提到,“基础的wpf布局,计算器,入门级的首选,学习wpf的小白可以看看”,这进一步强调了这个项目是面向新手的,主要教授如何在WPF中创建一个简单的计算器应用,涵盖了基本的布局管理技术,适合对WPF不熟悉的...

    wpf控件例子

    通过`Style`和`Template`属性,你可以实现复杂的视觉效果。在压缩包中,你会看到如何使用`ControlTemplate`来改变控件的结构和交互行为。 **数据绑定**:WPF的强大之处在于其数据绑定机制。通过数据绑定,控件可以...

    WPF简单上手项目.zip

    在本项目“WPF简单上手项目”中,我们将探讨如何快速入门WPF,并通过实践来创建一个简单的页面。** **1. WPF简介** WPF是.NET Framework的一部分,它基于XAML(Extensible Application Markup Language)来描述用户...

    WPF自学手册

    使用`Style`和`ControlTemplate`,您可以自定义控件的视觉外观和行为。 ### 3. 命令 WPF中的命令是一种处理用户输入(如点击按钮)的方式,它将用户界面与业务逻辑分离。命令对象封装了执行操作的方法,并处理了...

    wpf编程宝典

    综上所述,《WPF 2010编程宝典》不仅适合初学者入门,也适合有一定经验的开发者深入学习。通过本书的学习,开发者能够全面掌握WPF的各项技术,并将其应用于实际项目中,开发出功能强大、界面美观的应用程序。

    WPF揭秘_中文版

    3. 样式和模板:WPF支持样式(Style)和控件模板(ControlTemplate),使得开发者可以定义和重用控件的外观和行为,从而使得UI具有一致性和可维护性。 4. 图形和动画:WPF具有强大的2D和3D图形处理能力,它内置了...

    WPF全系列事例代码

    **WPF全系列事例代码**是一份针对Windows Presentation Foundation(WPF)技术的源代码集合,适合初学者用于入门学习。WPF是.NET Framework的一部分,由Microsoft开发,用于构建桌面应用程序,它提供了丰富的用户...

    WPF编程宝典——C# 2010版.pdf

    文档的描述中提到,本书对于WPF的入门和提高都大有帮助,这说明它不仅适合初学者通过学习WPF的基本概念、开发流程、常用控件等来入门,也适合有一定WPF基础的开发者用作参考,以便于更深入地了解WPF的高级特性,解决...

    WPF、SilverLight、XAML新技术文档

    - **样式与模板**: 使用 Style 和 ControlTemplate 对控件的外观进行高度定制。 - **图形系统**: WPF 的图形系统支持矢量图形、3D 图形等多种形式。 - **命令系统**: WPF 中的命令系统用于封装和执行特定操作,简化...

    WPF 樣式與資源 #1 – 如何定義資源與套用樣式

    曹祖聖讲师在课程中详细介绍了如何在WPF中定义资源和设计样式,以及如何将样式应用到控件上,非常适合WPF初学者入门学习。 ### **一、定义资源** 资源在WPF中扮演着核心角色,它们是可重用的对象集合,可以包括...

    Windows Presentation Foundation 入门

    ### Windows Presentation Foundation (WPF) 入门知识点详解 #### 概述 Windows Presentation Foundation (WPF) 是 Microsoft 提供的一种用于构建 Windows 客户端应用程序的框架。它结合了强大的图形渲染引擎、灵活...

Global site tag (gtag.js) - Google Analytics