初学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>

今天就到次为止吧。第一次有点匆忙!

时间: 2024-10-24 19:52:50

初学WPF的相关文章

[初学WPF]控件大小自适应

想在Win上自己写点小工具用,GUI自然是免不了的,于是决定学一学WPF,直接拖控件是很方便啊.控件拖出来以后发现运行时改变窗口大小控件不会重绘,搜索了一下发现了解决办法:使用Viewbox控件. Viewbox控件的功能是"Defines a content decorator that can stretch and scale a single child to fill the available space",即Viewbox只能有一个子元素,并且会拉伸/缩放这个子元素使其填

初学WPF,做一款小游戏练习一下

以前做项目的时候有用过Silverlight,最近了解了一下WPF,做了一款简单的小游戏来练手,希望能和大家多多交流. 想法:最强大脑 牛人多多,对色彩的分辨更是让人目瞪口呆,于是我就想到做一个小游戏,简单一点,做网格状的色块,中间穿插一块不同颜色但是又非常相近的颜色块,点击该颜色块即为通关,进入下一关,下一关的色块数量+1,直到到达一个差不多的关卡后不再+1: 效果如图 说做就做,新建工程,开始实现,首先准备好一组颜色相近的颜色代码,百度HTML颜色代码,随便选取,越相邻颜色色差越小. 1 p

初学WPF之程序启动几种方式

1.第一种是默认的方式,通过app.xaml中的StartupUri="MainWindow.xaml"配置的. 1 <Application x:Class="BaseElement.App" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/

WPF控制动画开始、停止、暂停和恢复

1.闲言 好久也没更新一博客了,自己有点发懒,同时确实这几个月来也有点忙.风机监测软件,项目中,有这样一个小需求:正常风机在旋转的时候,上位机软要做一个风机的图片,让它不停地旋转,一但检测到下面风机停止了,上位机软件界面的风机图片也要跟着停止,并且风机图片的旋转速度最好是能够与真实的速度成比例关系,这样软件才更有逼格一点.就是实现这样一个效果,看下图1,左边是一个状态指示,没有做动画,只是做了一个图片的切换,效果还看得过去吧. 图1 风机旋转动画 2.动画制作 在WPF做动画前,首先超码得有3个

[WPF系列]从基础起步学习系列计划

引言 WPF技术已经算不什么新技术,一搜一大把关于WPF基础甚至高级的内容.之前工作中一直使用winform所以一直没有深入学习WPF,这次因项目中使用了WPF技术来实现比较酷的展示界面.我在这里只是把个人学习WPF的过程做些总结,同时也为想我这样的初学WPF的提供一点帮助.我争取做到由浅入深,系统全面.不足之处还请大家指教. 学习工具 俗话说:“工欲行其事,必先利其器”,在学习WPF时我们应该找几个工具提高我们的学习和开发效率. kaxaml 一个实时查看xaml代码和呈现的工具.可从这里下载

为WPF和Silverlight的Grid添加边框线(zz)

  Grid是WPF和Silverlight中的一个重要的布局元素,其他的布局元素还有StackPanel, Canvas, Border等等.从字面上说,Grid是一个表格的意思,它的使用也确实很方便,从视觉上很像一个表格的样式,有行,有列的概念,这种效果很适合于需要多多个子控件进行布局,并希望保持左边或者上对齐的效果. 我们来看一个最简单的例子(本文采用Silverlight做演示,在WPF中也是一样的) 使用Grid的时候,一般先定义Grid的行和列的设置,然后在其放置其他控件并且设置他们

WPF 变量绑定实现

最近初学WPF,遇到如控件的内容是动态生成的.这时候就需要变量绑定. 简单写下变量绑定的步骤. 如下面的 例子,TextBlock 的内容是动态的,绑定变量StuName. <TextBlock x:Name="textBlock1" Grid.Column="7" HorizontalAlignment="Left" Margin="68.205,6,0,96" Grid.Row="3" TextW

WPF 简易手风琴 (ListBox+Expander)

概述 之前听说很多大神的成长之路,几乎都有个习惯--写博文,可以有效的对项目进行总结.从而提高开发的经验.所以初学WPF的我想试试,顺便提高一下小学作文的能力.O(∩_∩)O哈哈~ 读万卷书不如行万里路,实践是最好的导师!最近在学习WPF,也尝试着做了一些小Demo,但并没有真正的使用WPF的开发模式--数据推动UI,最近偶然的机会也是工作需求,就尝试着写了一个简易的手风琴控件, 因为初学的原因,可能在逻辑上,代码上有些欠缺,还请大神们多多指点,在这里先感谢各位!(下面是效果图) 思路 剖析效果

WPF——数据绑定(一)什么是数据绑定

注意:本人初学WPF,文中可能有表达或者技术性问题,欢迎指正!谢谢! 一:什么是数据绑定? “Windows Presentation Foundation (WPF) 数据绑定为应用程序提供了一种简单而一致的方法来显示数据以及与数据交互. 元素能够以 公共语言运行时 (CLR) 对象 和 XML 形式绑定到来自各种数据源的数据.“ 这一段的解释来自于MSDN(貌似是机器翻译),我个人理解,数据绑定就是把我们需要操作的两个或多个对象的属性值相互关联的一种方便我们编程的技术. 二:一个绑定关系的四