lin

返回

WPF(Windows Presentation Foundation) 是微软基于 .NET 的桌面 UI 框架,用 XAML 声明式语言 + 数据绑定 + MVVM 模式构建界面。下面按学习路径梳理核心内容:

1. 核心架构思想#

XAML(界面外观描述)
    ↕ 数据绑定(Data Binding)
C# 代码(业务逻辑)
plaintext

与传统 WinForm 最大的区别:界面与逻辑解耦,尽量不直接在后台代码里操作控件。

2. XAML 基础#

<Window x:Class="Demo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        Title="主窗口" Width="400" Height="300">
    <Grid>
        <Button Content="点击" Click="Btn_Click" 
                Width="100" Height="30"/>
    </Grid>
</Window>
xml
  • 每个 XAML 元素对应一个 .NET 对象
  • x:Name 给控件起名以便代码访问
  • 属性可在 XAML 中直接设置,也可通过样式/模板统一控制

3. 布局容器(重要)#

容器特点
Grid行列网格布局(最常用,类似 HTML 表格)
StackPanel水平或垂直堆叠
WrapPanel空间不足自动换行
DockPanel靠边缘停靠
Canvas绝对坐标定位

原则:少用 Margin 硬定位,多用容器自动布局。

4. 数据绑定(WPF 的灵魂)#

<TextBox Text="{Binding UserName, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Text="{Binding Age, StringFormat='年龄:{0}'}" />
xml
public class User : INotifyPropertyChanged
{
    private string _userName;
    public string UserName
    {
        get => _userName;
        set { _userName = value; OnPropertyChanged(nameof(UserName)); }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string name) =>
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
csharp
  • DataContext:绑定的数据源(通常在窗口或控件上设置)
  • INotifyPropertyChanged:属性变化时通知界面刷新

5. 依赖属性(Dependency Property)#

WPF 控件的属性大多是依赖属性,支持绑定、动画、样式:

public static readonly DependencyProperty TitleProperty =
    DependencyProperty.Register("Title", typeof(string), typeof(MyControl),
        new PropertyMetadata("默认值"));
csharp

自定义控件时需要掌握,日常开发主要会用即可。

6. 事件与命令#

  • 事件:按钮 Click、鼠标 MouseDown 等(与 WinForm 类似)
  • 路由事件:事件可沿可视化树冒泡/隧道(Preview 前缀),如 PreviewMouseDown
  • 命令(Command):解耦事件处理逻辑,MVVM 中代替事件
<Button Content="保存" Command="{Binding SaveCommand}" />
xml

7. MVVM 模式(WPF 最佳实践)#

View(XAML)  ←数据绑定→  ViewModel(逻辑,不引用控件)
                              ↑
                         Model(数据/业务)
plaintext
  • View:纯界面
  • ViewModel:实现 INotifyPropertyChanged,暴露属性和 ICommand
  • Model:数据实体(如前面的 User 类)

常用库:CommunityToolkit.Mvvm(微软官方轻量 MVVM 库,Source Generator 自动生成通知代码)

8. 常用主题#

  • 样式(Style)/ 资源(Resource)/ 资源字典:统一定制控件外观
  • 模板(ControlTemplate / DataTemplate):完全重写控件结构 / 定义数据如何展示(如 ListBox 每一项长什么样)
  • 触发器(Trigger / DataTrigger):条件改变时自动切换样式
  • 线程:Dispatcher.Invoke() 跨线程更新 UI
WPF开发基础
作者 lin
发布于 2026年10月17日

留言

无需登录,留下你的想法。

0
昵称颜色
可见范围