WPF应用程序开发

WPF应用程序开发

WPF不仅提供了强大的布局功能和窗体渲染功能,在WPF应用程序开发中,还能够实现如Flash一样的动画效果,这就使得在Windows窗体中能够实现Flash动画效果,Microsoft Expression Blend 2提供了动画轴,动画事件处理面板,方便了开发人员在WPF中实现动画效果。

19.3.1  WPF动画事件

WPF可以像Flash一样支持动画开发,与普通的事件不同的是,WPF包括一个动画事件,这个动画事件描述的是当用户执行某个操作时所触发的动画事件。首先需要创建一个动画对象,这个对象可以是一个图片,也可以是一个控件,其XAML文档如下所示。

<Button HorizontalAlignment="Left"Margin="267,103,0,0" VerticalAlignment="Top"

Content="会变的按钮" Height="52.687" Width="86" Opacity="0.4"/>

上述代码创建了一个按钮控件,并为按钮控件配置了相应的属性,这些属性包括对齐方式,大小,文本,以及不透明度。如果开发人员希望当用户的鼠标单击该控件时,该控件的宽度和高度都会变化,并且不透明度也会变化,在Microsoft Expression Blend 2中的交互控制面板可以完成该事件的配置,如图19-13所示。

单击【+事件】按钮可以为WPF应用程序添加动画事件,Microsoft ExpressionBlend 2能够智能的识别WPF应用中的控件并为相应的控件选择方法,为了实现开发人员所希望实现的效果。在下拉菜单中,这里可以选择【Click】事件如图19-14所示。

图19-13  交互面板                   图19-14  选择事件

选择事件后单击【时】按钮旁边的加号能够为动画事件添加新操作,如果WPF应用程序没有创建时间轴时,系统会提示是否添加一个时间轴,单击【确定】按钮即可创建一个默认的时间轴以供开发人员进行动画开发,如图19-15所示。

图19-15  添加时间轴

注意:Story board可以翻译成节目播出表,其概念同时间轴基本相同,都会规定对象的播放顺序和方法。

19.3.2  WPF时间轴

在Flash动画的制作中,有一个时间轴的概念。时间轴是用来控制在动画运行中相应的时间时,某个或某些对象所需要执行的操作。例如一个Flash动画,在动画运行后,第5秒的时候有一个小人出现在动画中,并且拿出了一朵花。在这个过程中,就需要在第5秒的时候对相应的对象(这里包括人,花)进行相应的操作。

在WPF应用程序中同样包括一个时间轴,这个时间轴用于定制WPF动画事件中某一个时刻所需要实现的动画效果,开发人员能够通过使用WPF时间轴快速的实现动画效果。例如上一节中讲到的开发人员希望实现一个按钮的动画效果,则可以通过时间轴编写相应的事件,时间轴如图19-16所示。

在对象和时间轴面板中,可以选择相应的对象进行动画事件的操作。在时间轴面板中,可以看到在时间轴上方包括从0开始的数字,这些数字就是时间控制。当触发某个动画事件时,时间轴就开始运算,从0开始向右移动,分别执行相应的路径以实现动画效果。如果开发人员希望用户单击按钮时能够实现按钮形状和透明度的变化,可以通过时间轴方便的生成动画。在进行时间轴操作前,可以通过样式控制控件的相应位置,样式和内容等,如图19-17所示。

图19-16  对象和时间轴                 图19-17  控件初始状态

初始状态确定后XAML文档代码如下所示。

<Button HorizontalAlignment="Left"Margin="267,103,0,0" VerticalAlignment="Top" Content="会变的按钮" Height="52.687" Width="86" Opacity="0.4"x:Name="button" RenderTransformOrigin="0.5,0.5">

<Button.RenderTransform>

<TransformGroup>

<ScaleTransformScaleX="1" ScaleY="1"/>

<SkewTransformAngleX="0" AngleY="0"/>

<RotateTransformAngle="0"/>

<TranslateTransformX="0" Y="0"/>

</TransformGroup>

</Button.RenderTransform>

</Button>

上述代码初始化了一个按钮控件并声明。在确定了初始状态后就需要拖动时间轴来确定动画播放的顺序,如图19-18所示。

图19-18  拖动时间轴

如图19-18所示,可以将时间轴拖放在2秒的位置。拖放后,可以直接在当前位置修改控件的属性。修改后当触发动画事件后,时间轴开始移动并且会随着时间轴进行控件属性的更改。当时间轴的时间指针移动到2秒位置时,属性就会更改成2秒时设置的样式,如图19-19和图19-20所示。

图19-19  初始状态                          图19-20  实现动画

通过使用时间轴能够快速定义WPF动画效果,开发人员能够使用时间轴进行相应的动画操作而无需通过编程实现,这样就简化了开发人员对底层动画实现的复杂的操作,节约了开发周期。另外,设计人员也能够设计动画事件并专注与WPF动画的实现,而开发人员能够专注逻辑处理,可以将动画事件的实现交付给设计人员,形成明确的分工。

19.3.3  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样式控制,示例代码如下所示。

<Grid x:Name="LayoutRoot">

<ButtonMargin="155,86,169,107" Content="更改后的按钮" Opacity="0.6"

x:Name="button"RenderTransformOrigin="0.5,0.5">

<Button.RenderTransform>

<TransformGroup>

<ScaleTransformScaleX="1" ScaleY="1"/>

<SkewTransformAngleX="0" AngleY="0"/>

<RotateTransformAngle="0"/>

<TranslateTransformX="0" Y="0"/>

</TransformGroup>

</Button.RenderTransform>

</Button>

</Grid>

上述代码直接修改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应用程序开发中所需要的事件。

19.4  WPF系统开发

WPF能够开发用户体验更好的Windows应用程序,通过使用WPF技术,能够实现可扩展的容易维护并且用户体验友好的Windows应用程序。在微软本身的产品中,很多应用也使用了WPF技术,包括Vista以及Expression。

19.4.1  WPF系统需求

在Windows应用程序开发中,常常需要进行数据查询,例如一个图书管理系统,借读的读者往往很难在诸多图书当中寻找一个适合自己的书,例如如果读者希望借一本关于ASP.NET的书,但是图书馆中包含了很多关于ASP.NET的书,读者曾经看过了一本关于ASP.NET 3.5的书,希望能够找到该书,但是在图书馆中找了半天都找不到这本书,读者就会想“如果能够查询该书就好了”。

开发人员可以很快的进行图书管理系统的编码并进行查询分析,现在读者可以在图书馆电脑中查询ASP.NET 3.5开发大全了,但是查询出来的结果显示的并不那么友好,而且界面颜色单调,这就需要Windows应用程序具有较好的用户体验。WPF应用程序就能够实现较好的用户体验,同样也可以实现普通Windows应用程序所能够完成的需求。

19.4.2  WPF界面开发

为了实现较好的用户体验,首先需要进行良好的WPF界面开发和布局。WPF支持PNG,JPG等图片资源作为WPF应用程序的背景,所以WPF应用程序能够实现半透明等多种渲染效果,WPF系统登录界面和查询界面如图9-24和图9-25所示。

图9-24  图书系统初步布局                        图9-25  用户查询界面布局

WPF能够支持PNG,JPG等格式的图片文件,所以在WPF窗体开发中能够使用渐变效果填充窗体并可以直接使用PNG图片进行窗体渲染。登录窗体包含了一个图片文件,图片文件的XAML代码如下所示。

<ImageMargin="0,0,2,23" Width="490" Height="450"Source="bg.png" Stretch="Fill"/>

注意:PNG图片支持透明效果,而其他的图片格式的文件可能不支持半透明效果,WPF支持半透明图片作为资源文件。

通过XAML文档能够定义图片文件并定义一些常用控件,为了实现以上的WPF界面布局,WPF应用程序窗体的XAML代码如下所示。

<Window

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">

…………………….

</Window>

上述代码通过XAML实现了一个基本的Windows窗体,该窗体的头部信息为图书管理系统,并且定义了窗体的高度和宽度为500,窗体内的字体样式为微软雅黑。在WPF窗体中,还需要定义Label控件和TextBox等控件,用于实现基本的人机交互,其XAML代码如下所示。

<Grid x:Name="LayoutRoot">

<ImageMargin="0,0,2,23" Width="490" Height="450"Source="bg.png" Stretch="Fill"/>

<LabelFontSize="16" FontWeight="Bold"Margin="132,37,116.11,0"

VerticalAlignment="Top"Height="30.117" Content="读者您好,欢迎查阅我图书馆资料"/>

<ImageHorizontalAlignment="Left" Margin="58,25,0,0"VerticalAlignment="Top"

Width="54"Height="54" Source="hello.png"Stretch="Fill"/>

<TabControlIsSynchronizedWithCurrentItem="True"Margin="12,95,21,23">

<TabItemHeader="登录">

<Grid/>

</TabItem>

<TabItemHeader="查询">

<Grid/>

</TabItem>

</TabControl>

<LabelHorizontalAlignment="Left" Margin="110,227,0,0"VerticalAlignment="Top" Content="用户名:"/>

<LabelHorizontalAlignment="Left" Margin="122,0,0,173"VerticalAlignment="Bottom" Content="密码:"/>

<TextBoxd:LayoutOverrides="HorizontalAlignment"HorizontalAlignment="Left" Margin="175,0,0,213.163"

VerticalAlignment="Bottom"Text="TextBox" TextWrapping="Wrap"Width="192.89"/>

<PasswordBoxMargin="175,0,116.11,179.037"VerticalAlignment="Bottom"/>

<ButtonHorizontalAlignment="Left" Margin="198,0,0,100"VerticalAlignment="Bottom" Content="登录"

Height="44.837"Width="75.887"/>

</Grid>

上述代码实现了WPF窗体的基本布局,在WPF窗体中包含三个Label标签控件,用于显示相应的提示信息,如“用户名”,“密码”等。该窗体还包含了两个TextBox控件,其中一个TextBox控件用于用户用户名的输入,而另一个TextBox控件用于密码的输入。编辑完成登录窗体后,就需要进一步对搜索窗体进行样式控制,搜索窗体XAML文档代码如下所示。

<Window

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">

……………….

</Window>

上述代码同样创建了一个宽度和高度都为500的窗体,在窗体中包括一个图片,一个搜索框和一个搜索结果框,这组控件XAML代码如下所示。

<Gridx:Name="LayoutRoot">

<ImageMargin="0,0,2,23" Source="bg.png" Stretch="Fill"Width="495" Height="450"/>

<ImageMargin="80,29,0,0" Source="ok.png" Stretch="Fill"Width="91"

Height="91"VerticalAlignment="Top" HorizontalAlignment="Left"/>

<LabelHorizontalAlignment="Left" Margin="194,54,0,0"VerticalAlignment="Top"

Content="输出相应书籍名称" FontWeight="Bold"/>

<TextBoxHorizontalAlignment="Left" Margin="194,83.837,0,0"VerticalAlignment="Top"

Text=""TextWrapping="Wrap" Width="246.487"/>

<TextBoxMargin="44,137,31.513,36" Text=""TextWrapping="Wrap"/>

</Grid>

窗体基本布局完成后,就可以为窗体中的控件进行动画事件的编写,创建动画事件能够提高用户的体验并且使应用程序更加绚丽。

19.4.3  WPF动画制作

在图书管理系统中,希望读者首先登录,如果登录成功了,就能够进行查询;如果登录没有成功,则不允许用户开始查询,只有用户登录成功后才有查询权限。在读者单击登录按钮时,应用程序可以播放一段动画以提示用户正在登录,如图9-26和图9-27所示。

图9-26  登录框位置下移                      图9-27  登录框位置上移

当用户单击登录按钮进行登录时,登录框会上下移动以提示用户该应用程序正在处理。在动画处理代码中,必须为其中的每一个控件进行动画处理描述,而写控件的动画处理的XAML文档基本相同,示例代码如下所示。

<Window.Resources>                                                                                                              //窗体资源文件

<Storyboardx:Key="OnClick1">                                                                                   //定义了动画事件

<DoubleAnimationUsingKeyFrames

BeginTime="00:00:00"

Storyboard.TargetName="label"Storyboard.TargetProperty=

"(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)">

<SplineDoubleKeyFrameKeyTime="00:00:01" Value="-85"/>

<SplineDoubleKeyFrameKeyTime="00:00:02" Value="49"/>

<SplineDoubleKeyFrameKeyTime="00:00:03" Value="-86"/>

</DoubleAnimationUsingKeyFrames>

上述代码定义了动画处理中变换的操作,在XAML文档中,动画处理都会被作为窗体资源而存在,而动画事件作为窗体触发器而存在,示例代码如下所示。

<Window.Triggers>                                                                                                                  //窗体触发器

<EventTriggerRoutedEvent="ButtonBase.Click" SourceName="button">

<BeginStoryboardStoryboard="{StaticResource OnClick1}"/>

</EventTrigger>

</Window.Triggers>

上述代码定义了窗体触发器,当用户操作OnClick1事件后则会触发动画处理事件。开发人员能够在<Storyboard x:Key="OnClick1">标记中定义控件动画事件的其他内容以扩展WPF动画事件。

19.4.4  WPF事件编写

在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所示。

图9-28  搜索C++相关书籍                         图9-29  清空结果后再搜索

时间: 2024-10-14 09:52:37

WPF应用程序开发的相关文章

WPF触控程序开发(三)——类似IPhone相册的反弹效果

用过IPhone的都知道,IPhone相册里,当图片放大到一定程度后,手指一放,会自动缩回,移动图片超出边框后手指一放,图片也会自动缩回,整个过程非常和谐.自然.精确,那么WPF能否做到呢,答案是肯定的. 在没有现成的控件的情况下,只有自己做,你肯定想到做动画,WPF触屏开发提供了相应的功能来获取触控点的一些变化,这些变化的最佳消费者个人认为是Matrix.我们回想下做动画一般怎么做,比如给一个button做个宽度增5的动画,我们一般是定义一个DoubleAnimation,然后定义一个Sotr

程序开发常用第三方类库一览表(VendorLib)

以下是自己开发过程中用到的第三方类库,记录下来方便查阅 ---------------------------------------------------------------------------------------------------///////////////////////////////////////////////////JAVA第三方类库///////////////////////////////////////////////----------------

在WPF应用程序中使用Font Awesome图标

Font Awesome 在网站开发中,经常用到.今天介绍如何在WPF应用程序中使用Font Awesome . 如果是自定义的图标字体,使用方法相同. 下载图标字体 在官方网站或github上下载资源 http://fontawesome.io/#modal-download https://github.com/FortAwesome/Font-Awesome 解压下载的文件(我是在github上下载的源码),我们要使用的是其中css和fonts文件夹中的内容 在项目中加入字体 新建WPF应

【ASP.NET Web API教程】3.3 通过WPF应用程序调用Web API(C#)

参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/core-static-files.html http://www.yuanjiaocheng.net/ASPNET-CORE/setup-mvc.html http://www.yuanjiaocheng.net/ASPNET-CORE/mvc-design-pattern.html http://www.yuanjiaocheng.net/ASPNET-CORE/mvc-routing.html h

通过百度、CDSN、新浪微博、知乎等互联网资源了解以下“程序开发语言”的应用领域。 通过海峡人才网、拉勾网了解相关程序语言在什么岗位上需要使用。

C和C++ 一般用于服务端的服务程序开发,硬件编程开发,系统等等大量框架要用到的.JAVA,学好这个可以开发移动设备程序,JSP网页程序.C#,学了这个可以开发Winform,WPF,ASP.NET,等等..即.NET的一个系.VB:Windows窗口应用程序开发.Delphi:强大的窗口编程软件,执行效率很高.Matlab:这个是数学软件,一般作为开发股票软件等等.

4: 模块化应用程序开发(纯汉语版)

模块化应用程序是指由松耦合的功能单元(模块)集成在一起的大型应用.一个客户端模块封装了程序的一部分功能和相关问题.模块可以使一些相关组件的集合,例如程序功能,包括界面和业务逻辑,或是程序基础架构,例如日志或是授权用户等程序级别的服务.模块之间互相独立又可以松耦合通信.使用模块化应用程序设计是开发测试,部署和维护你的应用程序更加简单. 举个例子,一个私人银行程序.用户可以访问多种功能,例如转账,支付账单,并更新个人信息.然而,场景背后,每个功能都封装到一个单独的模块.这些模块互相交换,或是和后台系

WPF与WinForm开发有什么区别?

转自http://hi.baidu.com/leoliu83/blog/item/1d1a4a66dcb41134aa184cfd.html WPF开发于WinForm之后,从技术发展的角度,WPF比WinForm先进是不容置疑的.我觉得WPF相比于WinForm有下面的一些较好的特性: 解决Window Handle问题   在Windows GDI或WinForm开发中复杂的GUI应用程序,会使用的大量的控件,如Grid等.而每个控件或Grid cell都是一个小窗口,会使用一个Window

Prism4 文档翻译系列---第4章 模块化应用程序开发

模块化应用程序是指将一个应用程序拆分成一系列的可以组合的功能单元.一个客户端模块封装了应用程序的一部分,并且通常是一系列相关的关注点.它可以包含一个相关的组件的集合,就像用户界面,应用程序功能,和一些业务逻辑,以及一些应用程序基础模块,比如应用程序级的日至服务或者用户认证.模块之间是相互独立的但是可以通过松耦合的手段进行通信.模块化的应用程序是的开发.测试.部署和扩展变得更新容易. 例如,一个个人银行应用程序,用户可以使用各种各样的功能,比如账户间汇款,支付,从个人的界面中更新个人信息等.然而,

细数改善WPF应用程序性能的10大方法

WPF(Windows Presentation Foundation)应用程序在没有图形加速设备的机器上运行速度很慢是个公开的秘密,给用户的感觉是它太吃资源了,WPF程序的性能和硬件确实有很大的关系,越高档的机器性能越有优势. 程序性能改善不是一蹴而就的,好的设计可以消除影响性能的问题,例如,在运行时构造对象就会对程序的性能造成影响.虽然WPF通过增强的导航等功能提供了更丰富的用户界面,但你应该考虑你的用户是否的确需要富图形界面,尽管WPF有这样那样的问题,但在UI设计,特别是自定义风格和控件