在 C# WPF 开发中,有一些核心类是构建应用程序的基础,理解这些类的作用和关系对掌握 WPF 至关重要。以下是 WPF 中的关键类及其核心功能:

一、应用程序基础类

  1. Application

    • 命名空间System.Windows

    • 作用:WPF 应用程序的入口和全局管理器,负责应用的生命周期(启动、退出)、全局资源、窗口管理等。

    • 核心属性 / 方法:

      • StartupUri:指定应用启动时加载的第一个窗口(如MainWindow.xaml)。

      • Resources:存储全局资源(如样式、模板),可在整个应用中复用。

      • Shutdown():关闭应用程序。

    • 示例:

      // 应用启动时执行
      public partial class App : Application {
          protected override void OnStartup(StartupEventArgs e) {
              base.OnStartupOnStartup(e);
              // 自定义启动逻辑
          }
      }
  2. Window

    • 命名空间System.Windows

    • 作用:WPF 中的窗口类,所有独立窗口都继承自此类(如MainWindow)。

    • 核心属性 / 方法:

      • Title:窗口标题;Width/Height:窗口尺寸;Icon:窗口图标。

      • Show():显示窗口;Close():关闭窗口。

      • DataContext:设置窗口的数据上下文(用于数据绑定)。

    • XAML 示例:

      
          
      

二、布局与元素类

  1. FrameworkElement

    • 命名空间System.Windows

    • 作用:所有 WPF 可视元素的基类(如控件、布局容器),定义了尺寸、位置、样式等核心属性。

    • 核心属性:

      • Width/Height:元素尺寸;MinWidth/MaxWidth:最小 / 最大尺寸。

      • Margin:外间距;Padding:内间距。

      • HorizontalAlignment/VerticalAlignment:对齐方式。

      • Style:元素应用的样式;DataContext:数据绑定上下文。

  2. Panel

    • 命名空间System.Windows.Controls

    • 作用:布局容器的基类,所有布局控件(如GridStackPanel)都继承自此类,负责子元素的排列。

    • 常用子类:

      • Grid:网格布局,按行和列组织元素。

      • StackPanel:栈式布局,水平 / 垂直排列元素。

      • Canvas:画布布局,通过坐标定位元素。

      • DockPanel:停靠布局,元素可停靠在上下左右或填充剩余空间。

三、控件类

  1. Control

    • 命名空间System.Windows.Controls

    • 作用:所有交互式控件的基类,提供样式、模板、字体等视觉属性。

    • 核心属性:

      • Foreground:前景色(如文本颜色);Background:背景色。

      • FontFamily/FontSize:字体样式和大小。

      • Template:控件模板(自定义控件外观的核心)。

  2. 常用控件子类

    • Button:按钮控件,响应Click事件,支持Command绑定。

    • TextBox:文本输入控件,通过Text属性获取 / 设置内容。

    • Label:静态文本显示控件,Content属性设置文本。

    • ListBox/ComboBox:列表类控件,ItemsSource绑定数据源,SelectedItem获取选中项。

    • CheckBox/RadioButton:选择类控件,IsChecked属性表示选中状态。

四、数据绑定核心类

  1. Binding

    • 命名空间System.Windows.Data

    • 作用:定义数据绑定规则,关联源(如 C# 对象属性)和目标(如控件属性)。

    • 核心属性:

      • Path:绑定源的属性路径(如UserName)。

      • Source:绑定的数据源(可省略,默认使用DataContext)。

      • Mode:绑定模式(如OneWay单向、TwoWay双向)。

    • 示例:

      
      
  2. DataContext

    • 类型object(所有FrameworkElement都包含此属性)

    • 作用:指定数据绑定的默认源,避免为每个绑定显式设置Source

    • 示例:

      // 在窗口中设置DataContext
      public MainWindow() {
          InitializeComponent();
          this.DataContext = new User { Name = "张三" }; // User是自定义类
      }
  3. INotifyPropertyChanged

    • 命名空间System.ComponentModel

    • 作用:接口,实现后可通知 UI 数据已更新(数据绑定的 “双向同步” 核心)。

    • 示例:

      public class User : INotifyPropertyChanged {
          private string _name;
          public string Name {
              get => _name;
              set {
                  _name = value;
                  OnPropertyChanged(); // 通知UI属性变化
              }
          }
      ​
          public event PropertyChangedEventHandler PropertyChanged;
          protected void OnPropertyChanged([CallerMemberName] string propertyName = null) {
              PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
          }
      }

五、样式与模板类

  1. Style

    • 命名空间System.Windows

    • 作用:定义控件的外观规则(如背景色、字体),可复用。

    • 核心属性:

      • TargetType:样式应用的目标控件类型(如Button)。

      • Setters:属性设置集合(如Setter Property="Background" Value="Red")。

    • 示例:

  2. ControlTemplate

    • 命名空间System.Windows.Controls

    • 作用:自定义控件的结构(如将按钮改为圆形),比Style更灵活。

    • 示例:

      
          
      

六、事件与命令类

  1. RoutedEvent

    • 命名空间System.Windows

    • 作用:WPF 的路由事件,可在元素树中向上(冒泡)或向下(隧道)传播,如Button.Click

  2. ICommand

    • 命名空间System.Windows.Input

    • 作用:命令接口,实现控件与逻辑的解耦(MVVM 模式核心),包含Execute(执行命令)和CanExecute(是否可执行)方法。

    • 常用实现类RelayCommand(自定义,需手动实现)。

七、图形与动画类

  1. Shape

    • 命名空间System.Windows.Shapes

    • 作用:2D 图形基类,子类包括Rectangle(矩形)、Ellipse(椭圆)、Line(直线)等。

  2. Storyboard

    • 命名空间System.Windows.Media.Animation

    • 作用:动画容器,管理动画的播放、暂停、停止,可驱动控件属性变化(如宽度、透明度)。

这些类构成了 WPF 的核心骨架,理解它们的继承关系(如ControlFrameworkElementUIElement)和协作方式,能帮助你更高效地开发 WPF 应用。