首页 > 代码库 > 初学WPF
初学WPF
实习工作比较空,所以就学点东西充实下自己。学校里学了好几年的C#,asp.net。看论坛上说会WPF就业比较好,所以就看着书学习下。
构建无XAML 的WPF 应用程序:
创建一个Visual C# 的“控制台应用程序”SimpleWPFApp:(如果直接创建“WPF 应用程序”,则会自动生成若干XAML 文件)
主程序代码:
using System;using System.Windows;using System.Windows.Controls;using System.Windows.Input;namespace SimpleWPFApp{ // 在此首例中,我们定义一个简单的类类型,表示应用程序本身和主窗口 class MyWPFApp : Application { [STAThread] static void Main() { MyWPFApp app = new MyWPFApp(); // 处理Startup 和Exit 事件,然后运行应用程序 //app.Startup += AppStartUp; //app.Exit += AppExit; //app.Run(); // 触发Startup 事件 app.Run(new MainWindow("更好的WPF应用程序",400,300)); } static void AppExit(object sender, ExitEventArgs e) { MessageBox.Show("应用程序已经推出"); } static void AppStartUp(object sender, StartupEventArgs e) { // 创建一个Window 对象,并设置若干基本属性 Window mainWindow = new Window(); mainWindow.Title = "我的第一个WPF 应用程序!"; mainWindow.Height = 200; mainWindow.Width = 300; mainWindow.WindowStartupLocation = WindowStartupLocation.CenterScreen; mainWindow.Show(); } } class MainWindow : Window { private Button BitExitApp = new Button(); public MainWindow(string title, int width, int height) { BitExitApp.Width = 200; BitExitApp.Height = 25; BitExitApp.Content = "退出"; BitExitApp.Click += new RoutedEventHandler(BitExitApp_Clicked); this.MouseMove += new MouseEventHandler(Window_MouseMove); this.KeyUp += new KeyEventHandler(Window_KeyUp); this.AddChild(BitExitApp); this.Title = title; this.WindowStartupLocation = WindowStartupLocation.CenterScreen; this.Width = width; this.Height = height; this.Show(); } private void BitExitApp_Clicked(object sender, RoutedEventArgs e) { Application.Current.Shutdown(); } private void Window_MouseMove(object sender,MouseEventArgs e) { this.Title = e.GetPosition(this).ToString(); } private void Window_KeyUp(object sender,KeyEventArgs e) { this.Title = e.Key.ToString(); } }}
注意:1.创建项目后打开项目属性选型卡修改项目“输出类型”,改为“Windows 应用程序”。
2.添加和删除程序集引用
构建纯XAML 的WPF 应用程序(本人认为这种纯XAML开发不是很实用,还要装一个window sdk。就没有多做研究。)
XAML语法:
1.命名空间
与其他XML 应用文档一样,我们一般会在根元素中定义自己的XML 命名空间。而
WPF 的XAML 文档的根元素,可以是Application、Window 或Page。我们会在这些根元素
中,通过XML 文档的xmlns 属性,定义若干自己的XML 命名空间。
一般我们会将presentation 定义成缺省(无名)的XML 命名空间:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
WPF 相关的多个.NET 命名空间(如System.Windows、System.Windows.Controls、System.
Windows.Data、System.Windows.Ink、System.Windows.Media、System.Windows.Navigation
等) 都被映射到该XML 命名空间中。对应的WPF 程序集为WindowsBase.dll 、
PresentationCore.dll 和PresentationFramework.dll。
将XAML 本身定义成名为x 的XML 命名空间:
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
它包含XAML 的关键字和.NET 的System.Windows.Markup 命名空间中的类型子集。
有时,我们也定义系统命名空间sys:
xmlns:sys="clr-namespace:System;assembly=mscorlib"
它对应于.NET 的System 命名空间和mscorlib.dll 程序集。
2.XAML 关键字
XML 命名空间x 提供了对XAML 关键字和.NET 命名空间System.Windows.Markup 的
成员的访问。下表列出了所有可用的XAML 关键字:
数组 Array 标记扩展
为XAML 中的对象数组提供通用支持,Type 为其必须属性。例
如:<x:Array Type="sys:String"> <sys:String>Hello</sys:String>
<sys:String>World</sys:String> </x:Array>
类 Class 属性
XAML 编译配置,在标记与代码隐藏之间联接分部类。格式为:
x:Class="命名空间.类名"
类修饰符 ClassModifier 属性
设置生成程序集中类的访问级别,对C# 可取值public(缺省的)
和internal,必须与x:Class 共同使用,且必须是页中的根元素。
代码 Code 指令元素
允许在XAML 页中放置代码,该代码将由XAML 编译器处理。
x:Code XAML 指令元素必须是带x:Class 属性的根元素的直接子
元素。x:Code 元素中的代码仍然在所提供的XML 命名空间内进
行解释。因此,通常还必须将x:Code 中的代码装入CDATA 段中。
字段修饰符 FieldModifier 属性
设置生成程序集中类字段的访问级别,对C# 可取值public 和
internal(缺省的)。x:FieldModifier 仅与具有x:Name 属性的元素
相关,因为一旦该字段成为公共字段,该名称将用于引用该字段。
键 Key 属性
键值,唯一地标识作为资源创建和引用,且存在于资源字典中的
元素。
名字 Name 属性
唯一标识对象元素,以便于从代码隐藏或通用代码中访问实例化
的元素。x:Name 一旦应用于支持编程模型,便可被视为与由构
造函数返回的用于保存对象引用的变量等效。
空 Null 标记扩展 为XAML 属性指定null 值。格式为:属性="{x:Null}"
共享的 Shared 属性
当设置为false 时(缺省为true),会修改WPF 资源检索行为,会
为每个资源请求创建一个新实例,而不是所有请求共享同一个实
例。
静态的 Static 标记扩展
用于引用类型的静态成员,格式为:
属性="{x:Static [前缀:]类型名.静态成员名}"
子类 Subclass 属性 用于不支持分部类声明的语言来创建子类。
类型 Type 标记扩展
为所提供的类型提供Type 对象,实质上是 C# 中的 typeof() 运
算符的等效标记扩展。格式为:属性="{x:Type [前缀:]类型名值}"
类型参数 TypeArguments 属性
将所需的约束传递到泛型类型的构造函数。格式为:
x:TypeArguments="{x:Type type1}[,{x:Type type2},...}]"
必须在同一元素上提供x:Class 属性,并且该元素必须是页中的
根元素。
统一标识符 Uid 属性
在标记元素内提供一个可供本地化进程和工具使用的标识符。
扩展数据 XData 指令元素
用于在XAML 页内放置XML 数据岛。其内的XML 元素不会被
视为WPF 命名空间的一部分,并且可以包含任意良构的 XML。
使用VS08 构建WPF 应用程序
创建一个名为“MyWpfApp”的“Visual C#”“WPF 应用程序”项目
自动生成的命名空间名为我们指定的项目名MyWpfApp,很不错;自动生成的应用程
序的代码文件名和类名都为App,还可以;但是自动生成的启动窗口的XAML 和C# 代码
文件名和类名都为Window1(与VB 和C# 的窗体程序的Form1 相似),这就不是我们所期
望的了。
我们可以在“解决方案资源管理器”窗格中选中Window1.xaml 项,然后按鼠标右键,
在弹出的浮动菜单中选“重命名”菜单项,并将文件名改为MainWindow.xaml。系统会自动
将对应的代码隐藏文件也改为了MainWindow.xaml.cs。
xaml代码:
<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="简单XAML 观察器" Height="400" Width="600" Loaded="Window_Loaded_1" Closed="Window_Closed_1" WindowStartupLocation="CenterScreen"> <DockPanel> <Button DockPanel.Dock="Top" Name="btnViewXaml" Height="40" Width="100" Content="观察XAML" Click="btnViewXaml_Click_1"/> <TextBox AcceptsReturn="True" Name="txtXamlData" FontSize="14" Background="Yellow" Foreground="Green" BorderBrush="Blue" VerticalScrollBarVisibility="Auto" AcceptsTab="True"></TextBox> </DockPanel></Window>
今天就到次为止吧。第一次有点匆忙!
初学WPF