@TOC


前言

做项目的时候,用到了WPF,总结下来,供以后参考,与诸君共勉。

一、理解和编写WPF,离不开理解和编写XAML

1.前端三剑客:HTML、CSS、JAVASCRIPT

  • HTML:标签语言嘛
  • XAML和html多少还是有点类似的。只不过XAML上添加上了自动binding机制

2.WPF两个核心:也是MVVM等一系列框架的基础,也就是两个重要的接口

  • INotifyPropertyChanged
    • INotifyPropertyChanged接口实现了数据和UI的联动,数据改变,UI界面随之改变。UI界面,数据改变随之改变
      • 这个接口可以理解为监听,生成的Model后,通过ViewModel对Model所有相关者进行监听
  • ICommand

3.WPF其中一个比较常用的框架就是MVVM(Model-View-ViewModel)

  • 组成部分:
    • Model:各个实体类
    • View:就是显示的界面,在WPF中一般都是XAML这样的页面
    • ViewModel:官方的解释是连接Model和View的桥梁,封装和暴露一些逻辑处理方法。但个人认为,其实所有的控制和方法都在ViewModel中,可以理解为页面所有方法的一个仓库
  • MVVM的实现原理
    • MVVM实现,简单的来说就是通过ViewModel来连接Model和View实现的。
      • ViewModel实现了接口INotifyPropertyChanged,在Model属性改变时可以触发View页面数据改变。
      • ViewModel中的command实现ICommand这个接口,使得方法也可以直接绑定在UI控件上,省去页面后台书写控件事件的代码
        • 在ViewModel中,定义了一系列的参数和方法,其中UI页面是通过ICommand这个实例来调用绑定的方法的

4.更具体的敬请收看:官方文档:https://learn.microsoft.com/zh-tw/dotnet/desktop/wpf/advanced/wpf-architecture?view=netframeworkdesktop-4.8

二、既然很niuBi,那咱们不整个例子看看这个WPF,能行?

1.这个项目是一个简单的记事本应用,允许用户输入文本、保存到文件以及从文件中加载文本。这个示例将展示WPF的基本使用方法,包括XAML界面设计和C#后台逻辑的编写。

2.项目结构

  • MainWindow.xaml:定义用户界面
  • MainWindow.xaml.cs:包含界面的逻辑

3.具体代码:

  • MainWindow.xaml:这个文件定义了应用的用户界面。它包含一个TextBox用于文本输入,两个Button用于触发保存和加载操作。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
      <Window x:Class="SimpleNotePad.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Simple Notepad" Height="350" Width="525">
    <DockPanel>
    <Menu DockPanel.Dock="Top">
    <MenuItem Header="File">
    <MenuItem Header="Open" Click="Open_Click"/>
    <MenuItem Header="Save" Click="Save_Click"/>
    </MenuItem>
    </Menu>
    <TextBox x:Name="textBox" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto"/>
    </DockPanel>
    </Window>

  • MainWindow.xaml.cs:这个文件包含用于处理用户交互(如按钮点击)的逻辑代码。它包括用于保存和加载文本文件的方法。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    using Microsoft.Win32;
    using System;
    using System.IO;
    using System.Windows;

    namespace SimpleNotePad
    {
    public partial class MainWindow : Window
    {
    public MainWindow()
    {
    InitializeComponent();
    }

    private void Save_Click(object sender, RoutedEventArgs e)
    {
    SaveFileDialog saveFileDialog = new SaveFileDialog();
    if (saveFileDialog.ShowDialog() == true)
    File.WriteAllText(saveFileDialog.FileName, textBox.Text);
    }

    private void Open_Click(object sender, RoutedEventArgs e)
    {
    OpenFileDialog openFileDialog = new OpenFileDialog();
    if (openFileDialog.ShowDialog() == true)
    textBox.Text = File.ReadAllText(openFileDialog.FileName);
    }
    }
    }


巨人的肩膀