WPF_1
剖析最简单的WPF程序
什么是项目模板
首先新建一个WPF项目模板
直接运行:
最简单的WPF程序
解决方案就对应着客户的一个需求,解决方案中可以含多个项目,每个项目编译后的结果是一个程序集Assembly。
现在来看下MainWindow.xaml中代码
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">//window对象的属性,设置窗口的大小名字
<Grid>
</Grid>
</Window>
这是标签性语言,有个Window标签就会生成一个Window对象.
代码中xmlns,表示告诉编译器识别到后面的http字符串,就引入一系列类库(名称空间)到MainWindow.xaml中。起到简化引入类库的操作。
代码中有xmlns:x,xmlns:d等等,也就是冒号后跟一个字符。这其实就是它的名字。而第一个xmlns是无需有名字的。起名字的作用在于用某个xmlns的东西,就要先写它的名字。而不写名字的,系统知道就是来自第一个xmlns。
那么第一行代码<Window x:Class="WpfApp1.MainWindow",就知道Window是来自第一个xmlns,而x:Class表示Class是来自名为x的xmlns。这段代码的意思是:该.xaml文件编译结果会放在WpfApp1的MainWindow中。
而WpfApp1.MainWindow.cs代码中,partial也表明是部分类。结论是这两个文件是一个类MainWindow的两部分
namespace WpfApp1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
用户界面的树形结构
浅析用户界面的树形结构
用户界面是指用户与应用程序打交道的地方,WPF就是图型的用户界面,结构是树形的。而其他的如winform是平面结构的。
这是一个WPF的结构,像树一样,根结点然后叶节点,一层层下去的。由一个根 开枝盛叶。
在XAML中为对象属性赋值
首先xaml文件中代码是声明性语言编写,声明性意味着每个标签就对应着一个对象,对象存储数据有字段和属性,向外暴露数据是用属性。因为字段是没法检验数据的,只能单纯存储数据。
在xaml文件中,能以以下三种形式为对象赋值:
1、以Attribute=Value形式赋值
是最方便的形式
Height="450" Width="800"
缺陷在于无法赋复杂的值
<Path Data="M 0,0 L 200,100 L 100,200 Z" Stroke="Black" Fill="Red"/>//最复杂形式
F12查看Data定义,发现它是Geometry类型属性,它是怎么映射过来的,可以与字符串对应 ?
在后台cs文件中新建一个human类
public class Human //声明一个human类 { public string Name { get; set; } public Human Child { get; set; }//如果一个human具有child对象,那么child也有自己的对象 }
然后再xaml文件中操作:
xmlns:local="clr-namespace:HappyWPF"//引入该程序集的名称空间,这样才能用human类
<Windows.Resource> <local:Human x:Key="human" Name="Tim"/> </Windows.Resource> //将human以window的一个资源的形式声明出来, //每个wpf程序以一个资源字典的形式去维护一系列资源
资源字典检索自己内容时,是靠索引的,上方x就是索引。
<Button Content="Show!" Width="120" Height="30" Click="Button_Click" />
Click是事件处理函数,右击进入事件处理函数当中。
private void Button_Click(object sender, RoutedEventArgs e) { Human human=this.FindResource("human")as Human;//检索资源中内容,findresource是object型,as成Human型,不成功则为null if (human != null) { MessageBox.Show(human.Name);//检索当中内容,并且返回名字 } }
将字符串类型数据转换成其他数据类型原理:
2、以属性标签形式赋值
现在想在botton按钮中加一个绿色的小方块
小方块代码如下:
<Rectangle Width="20" Height="20" Stroke="DarkGreen"Fill="LawnGreen">
用第一种赋值方式是行不通的。采用属性标签
<Button Width="120" Height="30">
<Button.Content>
<Rectangle Width="20" Height="20" Stroke="DarkGreen"Fill="LawnGreen"/>
</Button.Content>
</Button>
3、以标签扩展赋值
与第一种赋值方式很像,只不过它赋的东西带花括号。而且常用的就只有几个
先看下以第一种赋值形式赋值:
<TextBlock Height="24"Width="123"Background="LightBlue" Text="Hello"/>
现在以标签扩展赋值:
//引入字符串名称空间
xmlns:sys="clr-namespace:System;assembly=mscorlib"
//创建资源
<Window.Resources>
<sys:String x:Key="stringHello">
Hello WPF!
</sys:String>
</Window.Resources>
//利用标签扩展使用资源
<TextBlock Height="24"Width="123"Background="LightBlue" Text="{StaticResource ResourceKey=stringHello}"/>