Follow me on GitHub Follow me on Twitter

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>
XAML部分
namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}
View Code
  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>
View Code
 页面逻辑部分:
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();
        }
    }
}
View Code
 “人的信息“部分,简单用于一个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();
    }
}
View Code
 最终效果:



结论:
WPF是非常不错的,需要坚持下去,下篇WPF文章将会写到对于XAML的理解和WPF LAYOUT。
posted @ 2014-11-15 17:30  官文祥  阅读(721)  评论(1编辑  收藏  举报