slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
WPF 编程基础 PowerPoint Presentation
Download Presentation
WPF 编程基础

Loading in 2 Seconds...

play fullscreen
1 / 28

WPF 编程基础 - PowerPoint PPT Presentation


  • 164 Views
  • Uploaded on

WPF 编程基础. API(Application Programming Interface) 是 Windows 操作系统编写 Windows 应用程序函数库,库中函数采用 C 语言调用格式。用 C 语言直接调用 API 函数也可以编制 Windows 应用程序,但大量的代码必须由程序员自己编写,给编程者带来很大的困难。

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'WPF 编程基础' - sugar


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
windows
API(Application Programming Interface)是Windows操作系统编写Windows应用程序函数库,库中函数采用C语言调用格式。用C语言直接调用API函数也可以编制Windows应用程序,但大量的代码必须由程序员自己编写,给编程者带来很大的困难。

.Net FrameWork中包括编写Windows应用程序、Web应用程序的基础类库(BCL),它是一个统一的、面向对象的、层次化的、可扩展类库,统一了微软当前各种不同框架和开发模式,无论开发Windows应用程序,还是开发Web应用程序,采用相同组件名称,组件具有类似属性、方法和事件,开发模式也相似,方便学习。该类库支持控件可视化编程。VC++.Net、VB.Net、C#语言都使用这个类库,消除了各种语言开发模式的差别。

Windows编程接口和类库
gdi wpf
GDI和WPF
  • GDI是2维图形库,它允许程序员用库中的函数编写与显视器、打印机和文件等图形设备进行交互的Windows和Web应用程序,可以在这些设备上输出字符和2D图形。自Windows操作系统问世,GDI就是其固有的2维图形库。虽然随着Windows操作系统升级,GDI也不断改进并升级到GDI+,但远远跟不上硬件发展速度,现代显卡都有自己的GPU(图形处理器),GDI最大的缺点就是不能利用现代显卡的强大图形处理能力。
  • 为此微软推出最新图形编程库WPF,是下一代显示系统。
slide4
和GDI相比WPF有如下优点:
    • 和DirectX采用相同技术,统一了微软各种图形类库。
    • 引入了XAML界面标记语言,将界面设计和编写代码分开,方便设计。
    • 支持2D和3D图形、动画、视频及音频回放。
    • 可以和GDI模型互操作。
    • 包括XML文件规范(XPS)文档、固定文档(WYSIWYG)、流文档和文档注释等多种文档处理模型。
    • WPF控件使用增强型数据绑定引擎,支持多种内容到WPF控件的绑定。
    • WPF控件使用矢量图形,自适应不同分辨率显示器。
    • 支持多种布局管理器,WinForm只有很少几种。
slide5
WPF控件通用属性

WPF位于 System.Windows 命名空间。类库中大部分控件都在System.Windows.Controls命名空间, 以下是一些常用属性:

  • Name:控件名称,区别控件类不同对象的唯一标志。
  • Text和Content: Text是字符串类型,TextBox和TextBlock控件只有Text属性,记录输入或显示的字符串。Content属性是Object类型,大部分控件只有Content属性, 。
  • Foreground:用于描述前景色的画笔,例如Label是显示字符的颜色。
  • Background:描述控件背景的画笔
  • FontFamily、FontSize、FontStretch、FontStyle和FontWeight:分别是字符所使用的字体名称、字体的大小、字体在屏幕上的压缩或放大方式、字体风格和字体的粗细等。
slide6
Width、Height、ActualWidth和ActualHeight:控件的宽、高、实际宽和高。如果Margin属性的4个边距都不为0,实际宽、高可能和宽、高不同。Width、Height、ActualWidth和ActualHeight:控件的宽、高、实际宽和高。如果Margin属性的4个边距都不为0,实际宽、高可能和宽、高不同。
  • Margin:控件距离其所在容器的左边、上边、右边和下边的距离。
  • HorizontalAlignment:在水平方向子控件相对于容器左边还是右边对齐。
  • VerticalAlignment:在垂直方向子控件相对于容器上边还是下边对齐。
  • ToolTip:当鼠标在控件上停留一段时间后,会在旁边出现提示字符串。
  • IsEnabled:布尔变量为true表示控件可使用,为false表示不可用,控件变灰色。
  • Visibility:为Visible控件正常显示,为Hidden或Collapsed控件不可见。
  • Cursor:鼠标移到控件上方时,鼠标显示的形状。
slide7
WPF程序基本结构

【例1】本例用C#代码创建一个最简单的WPF应用程序。

using System.Windows;//WPF应用程序必须引用的命名空间

using System.Windows.Controls;//WPF控件所在的命名空间

namespace e2_1

{ class Window1 : Window

//WPF窗口类,必须以Window类为基类

{ [STAThread]

static void Main()

{ Application ap=new Application();

//必须建立Application对象

ap.Run(new Window1()); }

}

}

slide8
【例2】本例用C#代码创建一个简单的WPF应用程序,在窗体中增加了一个按钮(Button)控件,并为单击按钮事件增加事件处理函数,单击按钮退出程序。【例2】本例用C#代码创建一个简单的WPF应用程序,在窗体中增加了一个按钮(Button)控件,并为单击按钮事件增加事件处理函数,单击按钮退出程序。

namespace e4_1

{class Window1 : Window

{private Button button1 = new Button();

public Window1()

{Title = "不使用VS创建的WPF程序";

WindowStartupLocation = WindowStartupLocation.CenterScreen;

Height = 200;

This.Width = 300;

button1.Click += newRoutedEventHandler(button1_Clicked);

button1.Height = 25;

slide9
button1.Width = 100;

button1.Content = "退出程序";

AddChild(button1);

Show();

}

private void button1_Clicked(object sender, RoutedEventArgs e)

{ Application.Current.Shutdown(); }

[STAThread]

static void Main()

{ Application ap=new Application();

ap.Run(new Window1()); }

}

}

vs2008 wpf
用VS2008创建WPF程序

【例2.4】本例在窗口中显示一行文字,增加3个按钮,单击标题为“红色”按钮,显示的文本颜色改为红色,单击标题为“黑色”的按钮,显示的文本颜色改为黑色,单击标题为“退出”按钮,关闭程序。实现步骤如下。

  • (1)运行VS2008程序,单击菜单"文件(F)|新建项目(P)…"菜单项,打开"新建项目"对话框如图1.1。在"模板(T) "列表框中选择"WPF应用程序",在"名称(N) "编辑框中键入e2_4,单击"确定"按钮,创建项目。出现如图2.1界面(窗体无控件,左侧工具箱和右侧属性窗口未打开), 生成一个空白窗体(Window1)。单击菜单"文件(F)|全部保存(L)"菜单项,保存解决方案的所有文件。解决方案包括一个项目,解决方案的所有文件都保存到e2_4文件夹下。
slide12
(2)VS2008生成的WPF程序看不到Main(),其被隐藏到Application类中。由App.xaml和App.xaml.cs文件共同定义类App。图2.1上侧为Window1窗口,可以在其中放置控件,用Window1.xaml文件记录设计的界面,文件内容在图2.1下侧。Window1类是Window类的派生类,Window1类由Window1.xaml和Window1.xaml.cs文件定义,代码在Window1.xaml.cs文件中。
  • (3)单击图2.1中标题为"Window1.xaml"的窗口标签,返回设计窗口。单击菜单"视图|属性窗口"菜单项打开属性窗口(见图2.1右侧)。选中Window1窗体,属性窗口显示Window1窗口属性,其中左侧为属性名称,右侧为属性值。Title属性值是窗口标题,修改Window1的Title属性值为"用VS2008创建WPF程序"。这是在设计阶段修改属性值。
slide13
(4)在图2.1下侧选中布局面板XAML标记<Grid>,它决定如何摆放面板中的所有控件,在属性窗口修改其属性Background="LightBlue"。还可在图2.1上侧用鼠标拖动的方法修改<Grid>布局面板、Windows窗体以及其他控件的大小,调整结果记录在Window1.xaml文件中。(4)在图2.1下侧选中布局面板XAML标记<Grid>,它决定如何摆放面板中的所有控件,在属性窗口修改其属性Background="LightBlue"。还可在图2.1上侧用鼠标拖动的方法修改<Grid>布局面板、Windows窗体以及其他控件的大小,调整结果记录在Window1.xaml文件中。
  • (5)下边在窗体中增加一个Label控件,返回标题为"Window1.xaml"的窗口。向Window1窗体中添加控件需要使用工具箱窗口,若看不到,可用菜单"视图|工具箱"菜单项打开这个窗口(见图2.1左侧)。双击工具箱窗口中"控件"标签下的Label控件, Label控件将放到Window1窗体中,可以拖动Label控件到指定位置。选中Label控件,打开属性窗口(见图2.1右侧),属性窗口显示Label的属性,修改Label的Content属性值为"我的第一个程序",该属性值是显示内容。
  • (6)用同样的方法在窗体中放三个Button控件到窗体,修改它们的属性Content,使标题分别为红色、黑色、退出。
slide15
(8)经过以上步骤,VS2008在Window1.xaml文件中增加了一些定义Label和3个Button控件的XAML标记,见图2.1下侧,这些XAML标记最终由编译器翻译为C#代码。(8)经过以上步骤,VS2008在Window1.xaml文件中增加了一些定义Label和3个Button控件的XAML标记,见图2.1下侧,这些XAML标记最终由编译器翻译为C#代码。
  • (9)为按钮单击事件函数增加代码。事件函数如下。这些代码在Window1.xaml.cs文件中。注意大括号中语句为程序员增加的代码,其余是自动增加的代码。也可以使用Window类的Close()方法关闭窗口,由于关闭了主窗体,程序也就结束了。

private void button1_Click(object sender, RoutedEventArgs e)

{ label1.Foreground = Brushes.Red; }

private void button2_Click(object sender, RoutedEventArgs e)

{ label1.Foreground=Brushes.Black; }

private void button3_Click(object sender, RoutedEventArgs e)

{ Application.Current.Shutdown(); }

slide16
(10)编译运行(图2.3),单击标题为"红色"的按钮,窗体用户区中文字符颜色变为红色,单击标题为"黑色"的按钮,中文字符颜色变为黑色,单击标题为"退出"的按钮,结束程序。(10)编译运行(图2.3),单击标题为"红色"的按钮,窗体用户区中文字符颜色变为红色,单击标题为"黑色"的按钮,中文字符颜色变为黑色,单击标题为"退出"的按钮,结束程序。
slide17
XAML标记和类型转换器

XAML是一种基于XML的标记语言(参见10.1.3节),每一个XML元素代表.Net控件的一个对象,XML元素的属性可以是.Net控件属性或者声明控件事件的事件处理函数,从而用声明的方式在设计程序界面阶段实现应用程序外观,并将程序界面设计和代码分离,方便不同人员同时工作。

设计WPF程序界面一般有如下3种方法:

  • 在设计阶段将工具箱中控件放到图2.1上侧设计窗口,用事件窗口增加事件函数。
  • 修改图2.1下侧XAML文件,增加控件、控件属性和事件函数,具有智能感知功能。
  • 用代码增加控件、事件函数,修改控件属性。
slide18
各种WPF应用程序
  • 1、传统WPF桌面应用程序

本章前边的例子都是传统意义的桌面应用程序。

  • 2、基于浏览器导航的WPF独立应用程序

WPF新增了一种浏览器窗口风格桌面应用程序。这种风格应用程的窗口提供了导航功能,有前进和后退两个按钮,可以查看以前或后边已看过的内容。在Windows操作系统当中,当打开一个文件夹查看文件时的窗口就具有这样功能。

slide19
【例3】本例创建基于浏览器导航的WPF独立应用程序。首先创建传统WPF桌面应用程序。修改XAML标记如下,其中阴影标记是需要修改的部分。【例3】本例创建基于浏览器导航的WPF独立应用程序。首先创建传统WPF桌面应用程序。修改XAML标记如下,其中阴影标记是需要修改的部分。

<NavigationWindow x:Class="WpfApplication1.Window1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="Window1" Height="300" Width="300">

<NavigationWindow.Content>

<Grid> </Grid>

</NavigationWindow.Content>

</NavigationWindow>

slide20
修改Window1.xaml.cs文件中的Window1类的基类,定义如下:修改Window1.xaml.cs文件中的Window1类的基类,定义如下:

public partial class Window1 : NavigationWindow{ … }

  • 其余不必修改。然后可以象传统WPF桌面应用程序那样在窗体放置控件,增加事件函数。
slide21
3、XAML 浏览器应用程序(XBAP)

XAML 浏览器应用程序结合了 Web 应用程序和胖客户端应用程序二者的功能。与 Web 应用程序类似,可以将 XBAP 发布到 Web 服务器,并且从浏览器中启动。与胖客户端应用程序类似,XBAP 可以利用 WPF 的功能,开发 XBAP 也与胖客户端开发相似。当使用VS2008创建新项目打开"新建项目"对话框,如果选择"WPF浏览器应用程序"模板就可以创建XAML 浏览器应用程序。

编译后,生成可执行文件(.EXE扩展名)、应用程序清单和部署清单。将 .exe 和关联的清单复制到 Web 服务器上, 不需要在 Web 服务器上安装 .NET Framework3.5,在网页上创建一个超链接以导航到该部署清单。当用户单击链接并导航到.xbap文件时,ClickOnce将自动处理下载细节并在浏览器启动应用程序,要求在客户端必须安装.NET Framework3.5。

slide22
2.37 综合例子:计算器

【例4】本例创建一个能进行加、减、乘、除的简单计算器。

  • (1)建立一个新项目。将Grid布局面板改为Canvas布局面板。
  • (2)设置Window1窗体ResizeMode属性为NoResize。该属性设置用户能够如何调整窗体大小,NoResize表示用户无法调整窗口的大小,不显示最小化框和最大化框。
  • (3)放TextBox控件到窗体,属性Text="0",IsReadOnly=true,TextAlignment=Right。
  • (4)增加10个Button控件,前9个按钮属性Name分别为:Button1-Button9,最后一个为Button0,属性Content分别为:1、2、3、4、5、6、7、8、9、0。
slide23
(5)增加7个Button控件,属性Name分别为:btn_dot、btn_equ、btn_add、btn_sub、btn_mul、btn_div、btn_C,属性Content分别为:.、=、+、-、*、/、C。设计界面如图。(5)增加7个Button控件,属性Name分别为:btn_dot、btn_equ、btn_add、btn_sub、btn_mul、btn_div、btn_C,属性Content分别为:.、=、+、-、*、/、C。设计界面如图。
slide24
(6)按钮控件Button0单击事件函数如下:

private void button0_Click(object sender, RoutedEventArgs e)

{ Button b1 = (Button)sender;

if (textBox1.Text != "0")

textBox1. Content += b1.Content;

else

textBox1.Text = b1.Content.ToString(); }

  • (7)按钮Button1-Button9的单击事件函数都设定为按钮Button0的单击事件函数。
  • (8)为标题为"."按钮增加事件处理函数如下:

private void btn_dot_Click(object sender, RoutedEventArgs e)

{ int n=textBox1.Text.IndexOf(".");

if(n==-1)

textBox1.Text=textBox1.Text+"."; }

  • (9)编译,运行,单击标题为"0"到"9"以及"."的按钮,在控件textBox1中可以看到输入的数字,也可以输入小数。
slide25
(10)先实现加法。为Window1类增加一个变量double sum = 0,记录部分和。
  • (11)输入了第一个加数,然后输入任一运算符(+、-、*、\或=),在输入第二个加数前,应先清除编辑框中显示的第一个加数。为实现此功能,为Window1类增加一个布尔变量blnClear,初始值为false,表示输入数字或小数点前不清除编辑框中显示,输入运算符(+、-、*、\或=)后,blnClear=true,表示如果再输入数字或小数点,先清除编辑框中的显示的前一个加数。修改前边程序,输入数字或小数点前,要判断变量blnClear,如为true,清除编辑框中显示的内容后,再显示新输入的数字或小数点,同时修改blnClear=false。为此修改Button0单击事件处理函数如下:

private void button0_Click(object sender, RoutedEventArgs e)

{ if(blnClear)

{textBox1.Text="0";

blnClear=false;}

slide26
Button b1=(Button)sender;

if(textBox1.Text!="0")

textBox1.Text+= b1.Text;

else

textBox1.Text= b1.Text; }

  • (12)修改btn_dot_Click方法如下:

private void btn_dot_Click(object sender, RoutedEventArgs e)

{ if(blnClear)

{textBox1.Text="0";

blnClear=false; }

int n=textBox1.Text.IndexOf(".");

if(n==-1)

textBox1.Text=textBox1.Text+".";

}

slide28
(14)等号(=)处理语句和+号处理基本一致,修改标题为"+"按钮的事件函数如下:(14)等号(=)处理语句和+号处理基本一致,修改标题为"+"按钮的事件函数如下:

private void btn_add_Click(object sender, RoutedEventArgs e)

{ double dbSecond=Convert.ToDouble(textBox1.Text);

if(!blnClear) switch(strOper){case "+":sum+=dbSecond;break; }

if(sender==btn_add) strOper="+";

if(sender==btn_equ) strOper="=";

textBox1.Text=Convert.ToString(sum);

blnClear=true; }

将标题为"="的按钮的单击事件处理函数设定为标题为"+"的按钮的单击处理事件函数。

  • (15)为标题为"C"按钮增加事件处理函数如下:

private void btn_C_Click(object sender, RoutedEventArgs e)

{ textBox1.Text="0";

sum=0;

blnClear=false;

strOper="+"; }

  • (16)请读者自己补上减法,乘法,除法运算的语句。