XAML前台标记语言(Chapter2代码讲解)
很不好意思,工作有点忙,博客停了两天。相对于一门语言的学习,理论知识和实践必不可少,大多数时间我们要用,对于代码也是,一边不行可以看两遍,实在不行背下来,其实就我个人而言,学习一门语言会经历阶段有: 一点不懂---->被逼着用,Copy,不管是什么--->哎,他们怎么写出来的代码--->看懂了别人的代码--->再次使用的时候发现,以前遇到过--->再看第三遍,第四遍,第五遍--->噢,原来是这个样子。 其实我们不是天生的天才神童(也有可能是),可是重复大量的工作我们就可以达到天才般的水平,所以 不会正常,多看几遍就可以了,但是千万别懒惰。
言归正传,先说一下 WPF开发的最佳的开发工具吧,目前本人用的是(Expression Blend 4 & Expression Design 4 & VS2010)当然你也可以选择其他的工具,只要自己看着方便就可以。下面看一下啊 我们之前的代码吧
首先第一个项目示例:EightBall-包含 app.config,App.xaml,window1.xaml
app.config 这个大家都很熟悉,从名字就可以得知他是程序 配置文件 , 比如最常用的数据库连接字符串,程序版本,常用的参数啊,都可以写到里面。
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
</startup>
</configuration>
这里面就是程序版本参数。
App.xaml 这个是程序的入口控制,比如你可以修改 首先运行的窗体,现在默认的是Window1.xaml,当然也可以更换其他的启动窗体;当然调用一下System.Threading.Mutex
类似QQ登录后,当再次运行桌面程序时候,就会提示:程序已经在运行等等。
1 <Application x:Class="WindowsApplication1.App" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 StartupUri="Window1.xaml" 5 > 6 <Application.Resources> 7 8 </Application.Resources> 9 </Application>
public partial class App : Application { System.Threading.Mutex CPDPM_Pro; public App() { this.Startup += new StartupEventHandler(App_Startup); } /// <summary> /// 程序只运行一次 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void App_Startup(object sender, StartupEventArgs e) { bool runing; CPDPM_Pro = new System.Threading.Mutex(true, "Process", out runing); if (!runing) { MessageBox.Show("程序已经运行!"); Environment.Exit(0); } //throw new NotImplementedException(); } }
window1.xaml文件就是我们要编辑的窗体了
AnswerGenerator.cs 是我们要调用的类。
下面分析一下 Window1.xaml文件
<Window x:Class="EightBall.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Eight Ball Answer" Height="328" Width="412" > <Grid> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Grid.Background> <LinearGradientBrush> <LinearGradientBrush.GradientStops> <GradientStop Offset="0.00" Color="Red" /> <GradientStop Offset="0.50" Color="Indigo" /> <GradientStop Offset="1.00" Color="Violet" /> </LinearGradientBrush.GradientStops> </LinearGradientBrush> </Grid.Background> </Grid> </Window>
首先<window></window> 这是 WPF Window.xaml的根目录,可以设置窗体属性 Title 标题,可以设置 最大化 最小化 ,尺寸,透明度,背景,与窗体有关的都可以设置
当然也可以在<window></window>标记下写属性比如 <window.width>1024</window.width>
<Window.BackGround> <ImageBrush><image source/></ImageBrush> </Window.BackGround>
其次<window></window> 中的 x:Class="EightBall.Window1" 是识别Window1 的后台路径,只有前台和后台路径一直才可以编译,不然组件无法实现。尤其是在窗体重命名的时候,往往要记得修改此属性,不然无法编译。 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 这两行是WPF文件的命名空间,这个是默认的不做考虑,是XAML文件都是有的。
往下就是<Grid> <Grid>就相当一个容器,容器里面放着我们所有的控件,和很多乱七八糟的东西 当然<Grid> 也可以嵌套定义的
下面看一下代码
<Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions>
<Grid> 是把这个界面(Grid 界面) <RowDefinition Height="*" />
分成三行 当然行指正定义它的高度 宽度是随着窗体的大小自动防缩的
高度设置 为 "*"的 意思是窗体拉大缩小 你会发现 这个行酒吧剩余的空间填满,运行拉边框就会发现。Auto也可以试一试
<Grid.Background> <LinearGradientBrush> <LinearGradientBrush.GradientStops> <GradientStop Offset="0.00" Color="Red" /> <GradientStop Offset="0.50" Color="Indigo" /> <GradientStop Offset="1.00" Color="Violet" /> </LinearGradientBrush.GradientStops> </LinearGradientBrush> </Grid.Background>
这个时候发现有 Grid背景属性,是由线条构成的 渐进色 参数 属性
下面的东西就很简单了 一些文本的文本控件的属性,后台后一个很实用的东西可以看一下
点击按钮后 有一个 this.Cursor = Cursors.Wait; 这就告诉用户当前正在忙碌中,鼠标会变成圈圈的忙碌,等代码处理结束后
this.Cursor = null;这样就可以变回鼠标的形状
而相对 项目中的NonCompiledXaml 不符合基础教程在这里不作考虑
好de到这里,谢谢