教育资源为主的文档平台

当前位置: 查字典文档网> 所有文档分类> IT计算机> .NET> 使用XAML创建按钮

使用XAML创建按钮

上传者:秦会斌
|
上传时间:2015-04-22
|
次下载

使用XAML创建按钮



本演练的目的在于介绍如何创建要在 Windows Presentation Foundation
(WPF) 应用程序中使用的动画按钮。本演练使用样式和模板来创建自定义的按
钮资源,通过该按钮资源可以重用代码并将按钮逻辑与按钮声明分开。本演练完
全是用可扩展应用程序标记语言 (XAML) 编写的。


本演练指导您通过在 Microsoft Visual Studio 中键入或复制和粘贴可扩展应
用程序标记语言 (XAML) 来逐步创建应用程序。
下图显示的是已完成的按钮。


让我们首先从创建一个新项目并向窗口中添加几个按钮开始。
创建新的 WPF 项目并向窗口中添加按钮

创建新的 WPF 项目:在“文件”菜单上,指向“新建”,再单击“项目”。此
时将打开下图所示的窗口。在左窗格中的“Visual C#”节点下面,选择“.NET
Framework 3.0”。在右窗格中,选择“Windows 应用程序 (WPF)”模板。将该
项目命名为“AnimatedButton”。这将创建应用程序的主干。

添加基本的默认按钮:本演练中所需的全部文件均由该模板提供。通过在解决方
案资源管理器中双击 Window1.xaml 文件来打开它。默认情况下,Window1.xaml
中存在一个 Grid 元素。移除 Grid 元素,并通过向 Window1.xaml 中键入或复
制和粘贴以下突出显示的代码来向可扩展应用程序标记语言 (XAML) 页面中添
加几个按钮:

按 F5 运行该应用程序;您应当能够看到类似下图的一组按钮。

现在您已经创建了基本按钮,这样就完成了在 Window1.xaml 文件中的工作。本
演练其余部分重点介绍如何在 app.xaml 文件中为这些按钮定义样式和模板。
接着,我们将会为这些按钮设置一些属性,以便控制按钮外观和布局。
您将使用资源来为整个应用程序定义按钮属性,而不是为这些按钮单独设置属
性。在概念上,应用程序资源与网页的外部级联样式表 (CSS) 相似;但是,资
源远比级联样式表 (CSS) 强大,在本演练结束时您将明白这一点。

定义 Application.Resources 块:打开 app.xaml 并添加下面突出显示的标记
(如果尚未添加):

资源范围由资源的定义位置来确定。如果资源是在 app.xaml 文件的
Application.Resoureses 中定义的,则将允许从应用程序中的任何位置使用资
源。
创建一个样式并用该样式定义基本属性值:向 Application.Resources 块添加
下面的标记。此标记创建一个应用于该应用程序中所有按钮的 Style,并将这些
按钮的 Width 设置为 90,将 Margin 设置为 10:

TargetType 属性指定将该样式应用于 Button 类型的所有对象。每个 Setter
都为 Style 设置不同的属性值。因此,此时该应用程序中的每个按钮的宽度都
为 90,边距都为 10。如果您按 F5 运行该应用程序,则将看到下面的窗口。

您还可以对样式进行更多的处理,这包括以各种方式微调对象的目标、指定复杂
的属性值,甚至将样式作为其他样式的输入。
为资源设置样式属性值:使用资源,可以通过一种简单的方式来重用通常定义的
对象和值。为了使代码更加模块化,使用资源定义复杂值尤其有用。向 app.xaml
添加下面突出显示的标记。

您已经在 Application.Resources 块的正下方创建了一个名为
“GrayBlueGradientBrush”的资源。此资源将定义一个水平渐变。此资源可以
在该应用程序中的任何位置(包括 在 Background 属性的按钮样式 setter 内
部中)用作属性值。现在,所有的按钮都具有此渐变的 Background 属性值。
按 F5 运行该应用程序。其外观类似于下图:


在本节中,将创建一个用来自定义按钮外观(表示)的模板。按钮表示是由几个
赋予按钮独特外观的对象(包括矩形和其他组件)组成的。
到目前为止,对应用程序中按钮外观的控制已限制为更改按钮的属性。如果您希
望更彻底地改变按钮的外观,该怎么办?使用模板可以强有力地控制对象的表
示。由于模板可以在样式中使用,因此您可以将模板应用于所有应用了样式的对
象(在本演练中为按钮)。

设置模板:由于控件(如 Button)具有 Template 属性,因此您可以像对 Style
中所设置的其他属性值那样,使用 Setter 来定义模板属性值。向按钮样式中添
加下面突出显示的标记。

更改按钮表示:此时,您需要定义模板。添加下面突出显示的标记。此标记指定
了两个后跟 DockPanel 且具有圆角的 Rectangle 元素。DockPanel 用于承载按
钮的 ContentPresenter。A ContentPresenter 显示按钮的内容。本演练中,内
容为文本 ("Button 1", "Button 2", "Button 3")。所有模板组件(矩形和
DockPanel)都放置在一个 Grid 内。

按 F5 运行该应用程序。其外观类似于下图:

向模板中添加玻璃效果:接着将添加玻璃效果。首先创建一些用来生成玻璃渐变
效果的资源。将这些渐变资源添加到 Application.Resources 块中的任何位置:

这些资源将用作按钮模板的 Grid 中所插入的矩形的 Fill。
向模板添加下面突出显示的标记。

请注意,x:Name 属性为“glassCube”的矩形的 Opacity 为 0,因此,当您运
行该示例时,将看到上面并没有覆盖玻璃矩形。这是由于我们将在以后向该模板
中添加用户与该按钮交互时将触发的触发器。但是,您可以通过将 Opacity 值
更改为 1 并运行该应用程序来查看按钮现在的外观。请参见下图。在转至下一
步之前,请将 Opacity 更改回 0。


在本节中,将创建属性触发器和事件触发器来更改属性值和运行动画,以响应用
户操作(如将鼠标指针移到按钮上并单击)。
添加交互性(鼠标悬停、鼠标离开和单击等)的一个简便方法就是在模板或样式
内部定义触发器。若要创建 Trigger,需要定义一个属性“条件”,例如:按钮
的 IsMouseOver 属性值等于 true。随后将定义在触发条件为 true 时所发生的
setter(操作)。

添加模板触发器:向模板添加突出显示的标记。

添加属性触发器:向 ControlTemplate.Triggers 块添加突出显示的标记:

按 F5 运行应用程序,并查看在将鼠标指针移到按钮上时的效果。
添加焦点触发器:接着,将添加一些类似的 setter 来处理当按钮具有焦点时(例
如,当用户单击按钮之后)的情况。

按 F5 运行应用程序,并单击其中的某个按钮。请注意,在单击该按钮之后,该
按钮仍具有焦点,因此它仍将保持突出显示状态。如果您单击另一个按钮,则新
按钮将获得焦点,而上一个按钮则失去焦点。
为 MouseEnter 和 MouseLeave 添加动画:接着将向触发器添加一些动画。
在 ControlTemplate.Triggers 块内部的任意位置添加下面的标记。

当鼠标指针移到该按钮上时,玻璃矩形会收缩;当指针离开该按钮时,镜面矩形
会返回到其正常大小。
当指针移到该按钮上(引发 MouseEnter 事件)时会触发两个动画。这些动画会
使玻璃矩形沿着 X 轴和 Y 轴收缩。请注意 DoubleAnimation 元素的属性:
Duration 和 By。Duration 指定动画持续半秒多,By 指定玻璃收缩 10%。
第二个事件触发器 (MouseLeave) 只是停止第一个触发器。当您停止某个
Storyboard 时,所有的动画属性都恢复到其默认值。因此,当用户将指针移开
按钮时,该按钮将返回到鼠标指针移到其上之前的状态。
添加单击按钮时的动画效果:最后一步是添加在用户单击按钮时将触发的触发
器。在 ControlTemplate.Triggers 块内部的任意位置添加下面的标记:

按 F5 运行应用程 序,并单击其中的某个按钮。当您单击某个按钮时,玻璃矩形
会旋转。

在本演练中,进行了下列练习:
使 Style 面向对象类型 (Button)。
使用 Style 控制整个应用程序中按钮的基本属性。
创建要用于 Style setter 的属性值的资源(如渐变)。
通过向按钮应用模板来自定义整个应用程序中按钮的外观。
自定义按钮的行为(包括动画效果)来响应用户操作(如 MouseEnter、MouseLeave
和 Click)。

版权声明:此文档由查字典文档网用户提供,如用于商业用途请与作者联系,查字典文档网保持最终解释权!

下载文档

热门试卷

2016年四川省内江市中考化学试卷
广西钦州市高新区2017届高三11月月考政治试卷
浙江省湖州市2016-2017学年高一上学期期中考试政治试卷
浙江省湖州市2016-2017学年高二上学期期中考试政治试卷
辽宁省铁岭市协作体2017届高三上学期第三次联考政治试卷
广西钦州市钦州港区2016-2017学年高二11月月考政治试卷
广西钦州市钦州港区2017届高三11月月考政治试卷
广西钦州市钦州港区2016-2017学年高一11月月考政治试卷
广西钦州市高新区2016-2017学年高二11月月考政治试卷
广西钦州市高新区2016-2017学年高一11月月考政治试卷
山东省滨州市三校2017届第一学期阶段测试初三英语试题
四川省成都七中2017届高三一诊模拟考试文科综合试卷
2017届普通高等学校招生全国统一考试模拟试题(附答案)
重庆市永川中学高2017级上期12月月考语文试题
江西宜春三中2017届高三第一学期第二次月考文科综合试题
内蒙古赤峰二中2017届高三上学期第三次月考英语试题
2017年六年级(上)数学期末考试卷
2017人教版小学英语三年级上期末笔试题
江苏省常州西藏民族中学2016-2017学年九年级思想品德第一学期第二次阶段测试试卷
重庆市九龙坡区七校2016-2017学年上期八年级素质测查(二)语文学科试题卷
江苏省无锡市钱桥中学2016年12月八年级语文阶段性测试卷
江苏省无锡市钱桥中学2016-2017学年七年级英语12月阶段检测试卷
山东省邹城市第八中学2016-2017学年八年级12月物理第4章试题(无答案)
【人教版】河北省2015-2016学年度九年级上期末语文试题卷(附答案)
四川省简阳市阳安中学2016年12月高二月考英语试卷
四川省成都龙泉中学高三上学期2016年12月月考试题文科综合能力测试
安徽省滁州中学2016—2017学年度第一学期12月月考​高三英语试卷
山东省武城县第二中学2016.12高一年级上学期第二次月考历史试题(必修一第四、五单元)
福建省四地六校联考2016-2017学年上学期第三次月考高三化学试卷
甘肃省武威第二十三中学2016—2017学年度八年级第一学期12月月考生物试卷

网友关注

国家公务员考试行测题库:行测判断推理模拟题10
2019国考暑期行测题库:行测每日一练常识判断练习题07.27
2019国考暑期行测题库:行测每日一练数量关系练习题07.31
国家公务员考试行测类比推理模拟题0717
2019国考暑期行测题库:行测每日一练数量关系练习题08.13
2019国考暑期行测题库:行测每日一练判断推理练习题07.05
2019国考暑期行测题库:行测每日一练言语理解练习题07.30
国家公务员考试行测题库:行测判断推理模拟题0723
国家公务员考试行测题库:行测判断推理模拟题0709
2019国考暑期行测题库:行测每日一练言语理解练习题08.08
国家公务员考试行测题库:行测判断推理模拟题0731
2019国考暑期行测题库:行测每日一练常识判断练习题07.09
2019国考暑期行测题库:行测每日一练判断推理练习题07.25
国家公务员考试申论模拟题:单独两孩
2019国考暑期行测题库:行测每日一练判断推理练习题07.18
国家公务员考试行测题库:行测资料分析模拟题0806
国家公务员考试行测题库:行测判断推理模拟题0719
2019国考暑期申论每周一练模拟练习题:司法公开,释法说理
2019国家公务员考试申论模拟题:预防残疾
2019国考暑期行测题库:行测每日一练数量关系练习题07.11
2019国家公务员考试申论模拟题:中国建筑
国家公务员考试申论模拟题:应该如何提高网速
2019国家公务员考试行测题库:行测判断推理模拟题0705
2019国家公务员申论模拟题:“老漂族”的烦恼
2019国考暑期行测题库:行测每日一练判断推理练习题07.12
2018国家公务员考试申论真题答案解析
2019国考暑期申论每周一练模拟练习题:以人为本 引领法治事业发展
国家公务员考试行测题库:行测判断推理模拟题0712
2019国考暑期行测题库:行测每日一练言语理解练习题08.06
2019国考暑期行测题库:行测每日一练常识判断练习题08.03

网友关注视频

沪教版牛津小学英语(深圳用) 四年级下册 Unit 4
沪教版牛津小学英语(深圳用) 四年级下册 Unit 3
第五单元 民族艺术的瑰宝_16. 形形色色的民族乐器_第一课时(岭南版六年级上册)_T3751175
二年级下册数学第二课
北师大版数学四年级下册3.4包装
冀教版小学数学二年级下册第二单元《有余数除法的竖式计算》
沪教版八年级下册数学练习册21.4(1)无理方程P18
七年级英语下册 上海牛津版 Unit5
北师大版数学 四年级下册 第三单元 第二节 小数点搬家
【部编】人教版语文七年级下册《泊秦淮》优质课教学视频+PPT课件+教案,广东省
沪教版八年级下册数学练习册一次函数复习题B组(P11)
【部编】人教版语文七年级下册《逢入京使》优质课教学视频+PPT课件+教案,安徽省
《空中课堂》二年级下册 数学第一单元第1课时
沪教版牛津小学英语(深圳用) 五年级下册 Unit 7
【部编】人教版语文七年级下册《逢入京使》优质课教学视频+PPT课件+教案,安徽省
沪教版牛津小学英语(深圳用) 六年级下册 Unit 7
冀教版小学数学二年级下册第二单元《租船问题》
河南省名校课堂七年级下册英语第一课(2020年2月10日)
冀教版英语四年级下册第二课
第五单元 民族艺术的瑰宝_16. 形形色色的民族乐器_第一课时(岭南版六年级上册)_T1406126
第8课 对称剪纸_第一课时(二等奖)(沪书画版二年级上册)_T3784187
北师大版小学数学四年级下册第15课小数乘小数一
冀教版小学英语四年级下册Lesson2授课视频
外研版八年级英语下学期 Module3
外研版英语七年级下册module1unit3名词性物主代词讲解
二年级下册数学第一课
沪教版牛津小学英语(深圳用) 四年级下册 Unit 12
北师大版数学四年级下册第三单元第四节街心广场
沪教版八年级下册数学练习册21.3(2)分式方程P15
外研版英语七年级下册module3 unit2第一课时