首页 > 代码库 > 初学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