WPF 学习之旅 HELLO WORLD篇
为什么要学WPF:
由于接下来的工作会做一些桌面软件,对博主来说可以快速上手的就是之前已经有过一点经验的WINFORM,和WPF,所以面临着选择问题。
网上关于WINFORM,WPF的论战很多。有说WINFORM不行的,有说WPF不行的,有说两个都不行的,当然不能被这些话绕晕,既然感兴趣,自己试试吧!
于是先看了很多WPF的介绍资料,之后就开始了入门学习。
本文分两个部分:
一:解析WPF初始提供的文件。
二:HELLO WORLD 部分。
WPF初始文件:
工程创建后,默认生成的XAML 与CS 代码如下:
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> </Grid> </Window>
namespace WpfApplication1 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } } }
XAML部分:第2,3行即引入命名空间,博主刚看到命名空间居然是URL后,一愣,后来查资料发现原来这样做的目的是保证命名空间唯一。
第3行中的x:是以后用"x"来代指此命名空间的意思。把第1,3行的"x"都改成"y"也是可以的。
第1行:这个Window 和 HTML中的 html一样,只允许有最上层的一个,</Window>即代表XAML文件结束。同时,这一行将生成一个MainWindow类,我们打开CS文件可以发现文件中也有个MainWindow类,这两部分之所以不冲突就是C# partial 关键字的功劳啦。
<Grid>即对应着HTML中的<body>
博主在其中随便输入了<TextBox Width="300" Background="PaleGreen">Hello</TextBox>
效果如下图
HELLO WORDL:
目的:输入框输入文字,即可根据关键字模糊查找人的信息。
直接贴代码了:
XAML部分:
<Window 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" mc:Ignorable="d" x:Class="WpfHelloWorld.MainWindow" Title="MainWindow" Height="350" Width="525"> <Grid x:Name="mainGrid"> <Grid.RowDefinitions> <RowDefinition Height="auto"></RowDefinition> <RowDefinition Height="*"></RowDefinition> </Grid.RowDefinitions> <TextBlock Grid.Row="1" Margin="10,10,13,10" Name="PersonInfoArea"> </TextBlock> <TextBox Grid.Row="0" Name="PersonKeywordInput"></TextBox> <Button Grid.Row="0" Width="40" Margin="454,0,13,0" Background="LightGray" Click="personInfoLoad" FontFamily="Microsoft Yahei">查找</Button> </Grid> </Window>
页面逻辑部分:
namespace WpfHelloWorld { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { IPersonDatabase databaseInstance; public MainWindow() { databaseInstance = new DataBase(); InitializeComponent(); } private void personInfoLoad(object sender, RoutedEventArgs e) { var personInfoList = databaseInstance.RetrivePersonByName(PersonKeywordInput.Text.Trim()); var personInfoBuilder = new StringBuilder(); foreach (var item in personInfoList) { personInfoBuilder.AppendLine(String.Format("ID = {0} NAME = {1}", item.Id, item.Name)); } PersonInfoArea.Text = personInfoBuilder.ToString(); } } }
“人的信息“部分,简单用于一个List模拟了数据源,然后实现了IPersonDatabase接口,可以根据关键字检索人:
public interface IPersonDatabase { List<Person> RetrivePersonByName(string keyWord); } public class DataBase : IPersonDatabase { List<Person> personRepository { get; set; } public DataBase() { var test = new Person { Id = 2, Name = "23"}; personRepository = new List<Person>(); personRepository.Add(new Person() { Id = 1, Name = "张一" }); personRepository.Add(new Person() { Id = 2, Name = "张二"}); personRepository.Add(new Person() { Id = 3, Name = "张三"}); personRepository.Add(new Person() { Id = 4, Name = "王一"}); personRepository.Add(new Person() { Id = 5, Name = "王二"}); personRepository.Add(new Person() { Id = 6, Name = "王三"}); personRepository.Add(new Person() { Id = 7, Name = "李一"}); personRepository.Add(new Person() { Id = 8, Name = "李二" }); personRepository.Add(new Person() { Id = 9, Name = "李三" }); personRepository.Add(new Person() { Id = 10, Name = "刘一"}); personRepository.Add(new Person() { Id = 11, Name = "刘二" }); personRepository.Add(new Person() { Id = 12, Name = "刘三" }); personRepository.Add(new Person() { Id = 13, Name = "刘四" }); personRepository.Add(new Person() { Id = 14, Name = "刘五" }); } public List<Person> RetrivePersonByName(string keyWord) { return personRepository.Where(item => item.Name.Contains(keyWord)).ToList(); } }
最终效果:
结论:
WPF是非常不错的,需要坚持下去,下篇WPF文章将会写到对于XAML的理解和WPF LAYOUT。