WPF不仅提供了强大的布局功能和窗体渲染功能,在WPF应用程序开发中,还能够实现如Flash一样的动画效果,这就使得在Windows窗体中能够实现Flash动画效果,Microsoft Expression Blend 2提供了动画轴,动画事件处理面板,方便了开发人员在WPF中实现动画效果。
WPF可以像Flash一样支持动画开发,与普通的事件不同的是,WPF包括一个动画事件,这个动画事件描述的是当用户执行某个操作时所触发的动画事件。首先需要创建一个动画对象,这个对象可以是一个图片,也可以是一个控件,其XAML文档如下所示。
上述代码初始化了一个按钮控件并声明。在确定了初始状态后就需要拖动时间轴来确定动画播放的顺序,如图19-18所示。
图19-18 拖动时间轴
如图19-18所示,可以将时间轴拖放在2秒的位置。拖放后,可以直接在当前位置修改控件的属性。修改后当触发动画事件后,时间轴开始移动并且会随着时间轴进行控件属性的更改。当时间轴的时间指针移动到2秒位置时,属性就会更改成2秒时设置的样式,如图19-19和图19-20所示。
图19-19 初始状态 图19-20 实现动画
通过使用时间轴能够快速定义WPF动画效果,开发人员能够使用时间轴进行相应的动画操作而无需通过编程实现,这样就简化了开发人员对底层动画实现的复杂的操作,节约了开发周期。另外,设计人员也能够设计动画事件并专注与WPF动画的实现,而开发人员能够专注逻辑处理,可以将动画事件的实现交付给设计人员,形成明确的分工。
在MicrosoftExpression Blend 2中只能控制WPF应用程序的样式,却无法进行事件处理开发,若需要进行WPF应用程序开发,就必须使用VisualStudio 2008。使用VisualStudio 2008打开MicrosoftExpression Blend 2创建的解决方案,能够进行WPF应用程序事件开发,如图19-21所示。
图19-21 使用Visual Studio 2008打开解决方案
在Visual Studio2008中进行WPF应用程序开发会呈现两个窗口,一个窗口用于直接进行Windows窗体布局,另一个窗口用于呈现相应的XAML文档。在Visual Studio 2008中,可以直接修改XAML文档进行WPF样式控制,示例代码如下所示。
x:Name="button"RenderTransformOrigin="0.5,0.5"> 上述代码直接修改XAML代码就可以实现Windows窗体样式的控制。与Microsoft Expression Blend2不同的是,在VisualStudio 2008中双击按钮控件,在就会在cs文件中自动创建相应的事件代码,开发人员可以在相应的区域中编写代码,示例代码如下所示。 private void button_Click(object sender, RoutedEventArgs e) { button.Content = "按钮控件被按"; //触发事件 } 上述代码运行后如图19-22和图19-23所示。 图19-22 按钮初始化 图9-23 动画事件和按钮事件 注意:WPF应用程序中的一些属性可能和Win From和ASP.NET中的一些属性不同,例如在Win From和ASP.NET中按钮控件上的文本是通过Text属性控制的,而在WPF中使用的是Content属性。 WPF应用的开发和Win Form应用程序的开发没有特殊的区别,但是WPF应用提供了更好的用户体验。WPF不仅能够提供动画事件同样也能够执行Win From应用程序开发中所需要的事件。 WPF能够开发用户体验更好的Windows应用程序,通过使用WPF技术,能够实现可扩展的容易维护并且用户体验友好的Windows应用程序。在微软本身的产品中,很多应用也使用了WPF技术,包括Vista以及Expression。 在Windows应用程序开发中,常常需要进行数据查询,例如一个图书管理系统,借读的读者往往很难在诸多图书当中寻找一个适合自己的书,例如如果读者希望借一本关于ASP.NET的书,但是图书馆中包含了很多关于ASP.NET的书,读者曾经看过了一本关于ASP.NET 3.5的书,希望能够找到该书,但是在图书馆中找了半天都找不到这本书,读者就会想“如果能够查询该书就好了”。 开发人员可以很快的进行图书管理系统的编码并进行查询分析,现在读者可以在图书馆电脑中查询ASP.NET 3.5开发大全了,但是查询出来的结果显示的并不那么友好,而且界面颜色单调,这就需要Windows应用程序具有较好的用户体验。WPF应用程序就能够实现较好的用户体验,同样也可以实现普通Windows应用程序所能够完成的需求。 为了实现较好的用户体验,首先需要进行良好的WPF界面开发和布局。WPF支持PNG,JPG等图片资源作为WPF应用程序的背景,所以WPF应用程序能够实现半透明等多种渲染效果,WPF系统登录界面和查询界面如图9-24和图9-25所示。 图9-24 图书系统初步布局 图9-25 用户查询界面布局 WPF能够支持PNG,JPG等格式的图片文件,所以在WPF窗体开发中能够使用渐变效果填充窗体并可以直接使用PNG图片进行窗体渲染。登录窗体包含了一个图片文件,图片文件的XAML代码如下所示。 注意:PNG图片支持透明效果,而其他的图片格式的文件可能不支持半透明效果,WPF支持半透明图片作为资源文件。 通过XAML文档能够定义图片文件并定义一些常用控件,为了实现以上的WPF界面布局,WPF应用程序窗体的XAML代码如下所示。 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="_19_4.Window1" x:Name="Window" Title="图书管理系统" Width="500" Height="500" FontFamily="MicrosoftYaHei" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"> ……………………. 上述代码通过XAML实现了一个基本的Windows窗体,该窗体的头部信息为图书管理系统,并且定义了窗体的高度和宽度为500,窗体内的字体样式为微软雅黑。在WPF窗体中,还需要定义Label控件和TextBox等控件,用于实现基本的人机交互,其XAML代码如下所示。 VerticalAlignment="Top"Height="30.117" Content="读者您好,欢迎查阅我图书馆资料"/> Width="54"Height="54" Source="hello.png"Stretch="Fill"/> VerticalAlignment="Bottom"Text="TextBox" TextWrapping="Wrap"Width="192.89"/> Height="44.837"Width="75.887"/> 上述代码实现了WPF窗体的基本布局,在WPF窗体中包含三个Label标签控件,用于显示相应的提示信息,如“用户名”,“密码”等。该窗体还包含了两个TextBox控件,其中一个TextBox控件用于用户用户名的输入,而另一个TextBox控件用于密码的输入。编辑完成登录窗体后,就需要进一步对搜索窗体进行样式控制,搜索窗体XAML文档代码如下所示。 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="_19_4.Window2" x:Name="Window" Title="Window2" Width="500"Height="500" FontFamily="Microsoft YaHei"> ………………. 上述代码同样创建了一个宽度和高度都为500的窗体,在窗体中包括一个图片,一个搜索框和一个搜索结果框,这组控件XAML代码如下所示。 Height="91"VerticalAlignment="Top" HorizontalAlignment="Left"/> Content="输出相应书籍名称" FontWeight="Bold"/> Text=""TextWrapping="Wrap" Width="246.487"/> 窗体基本布局完成后,就可以为窗体中的控件进行动画事件的编写,创建动画事件能够提高用户的体验并且使应用程序更加绚丽。 在图书管理系统中,希望读者首先登录,如果登录成功了,就能够进行查询;如果登录没有成功,则不允许用户开始查询,只有用户登录成功后才有查询权限。在读者单击登录按钮时,应用程序可以播放一段动画以提示用户正在登录,如图9-26和图9-27所示。 图9-26 登录框位置下移 图9-27 登录框位置上移 当用户单击登录按钮进行登录时,登录框会上下移动以提示用户该应用程序正在处理。在动画处理代码中,必须为其中的每一个控件进行动画处理描述,而写控件的动画处理的XAML文档基本相同,示例代码如下所示。 BeginTime="00:00:00" Storyboard.TargetName="label"Storyboard.TargetProperty= "(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)"> 上述代码定义了动画处理中变换的操作,在XAML文档中,动画处理都会被作为窗体资源而存在,而动画事件作为窗体触发器而存在,示例代码如下所示。 上述代码定义了窗体触发器,当用户操作OnClick1事件后则会触发动画处理事件。开发人员能够在 在WPF应用程序控件动画制作中,不能为了实现绚丽的动画而放弃了实用的功能。该应用程序希望用户能够进行登录并对用户的身份进行验证操作,如果验证成功则能够执行操作,而如果身份验证不成功,则无法执行搜索操作。在Visual Studio 2008中,双击按钮控件以进行登录验证操作,示例代码如下所示。 private void button_Click_1(object sender, RoutedEventArgs e) { if ((textBox.Text == "admin") && (passwordBox.Password== "admin")) //如果是管理员 { Window2 w2 = new Window2(); //打开新窗口 w2.ShowDialog(); } } 上述代码定义了用户如果输入了用户名和密码分别为admin/admin时,则验证成功,就会呈现搜索框,如果用户名和密码不正确,则无法验证进行搜索。进入搜索窗口时,用户可以在书籍搜索框中输入相应信息,当用户输入信息后,结果框就能够及时反映相应的搜索结果,示例代码如下所示。 public string[] books = { "ASP.NET开发大全", "ASP开发指南",".NET应用程序", "组件开发指南", "PHP新手入门", "C++学习" }; private void TextBox_TextChanged(object sender, TextChangedEventArgs e) //用户查询 { if (!String.IsNullOrEmpty(search.Text)) //如果输入不为空 { result.Clear(); //清空结果 for (int i = 0; i < books.Length; i++) //遍历书籍 { if (books[i].Contains(search.Text)) //如果匹配则输出 { result.Text +=books[i].ToString() + "\n"; //填充结果控件 } } } } 上述代码定义了一个数组以存储书籍的相应信息,当用户在搜索框中输入相应的信息时,系统就会遍历数据库进行书籍查询,运行结果如图9-28和图9-29所示。 19.4 WPF系统开发
19.4.1 WPF系统需求
19.4.2 WPF界面开发
19.4.3 WPF动画制作
19.4.4 WPF事件编写