一、WPF 基础概念
-
什么是 WPF
-
WPF 与 WinForm 的区别
特性 WPF WinForm 渲染引擎 Direct3D(硬件加速) GDI+(软件渲染) 界面描述 XAML(声明式)+ C# 纯 C# 代码(命令式) 数据绑定 强大的内置数据绑定机制 需手动实现数据同步 扩展性 支持自定义控件、模板、动画 扩展能力有限
二、XAML 基础
-
XAML 简介
-
全称:Extensible Application Markup Language(可扩展应用程序标记语言)。
-
作用:用标记语言描述界面,实现 "界面(XAML)" 与 "逻辑(C#)" 分离。
-
文件格式:以
.xaml
为扩展名,本质是 XML 文件。
-
-
XAML 语法规则
-
标签类型
:
-
双标签:
<标签名>内容</标签名>
(如<Button>点击我</Button>
) -
单标签:
<标签名/>
(如<Separator/>
,无内容时使用)
-
-
属性 :以键值对形式定义在开始标签中,如
<Button Content="确定" Width="100"/>
。 -
命名空间(xmlns)
:类似 C# 的using,用于引入控件库,默认命名空间:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" <!-- WPF控件 --> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" <!-- XAML扩展 -->
-
三、WPF 项目结构
一个基础 WPF 项目包含以下核心文件:
-
App.xaml + App.xaml.cs
-
应用程序入口,定义全局配置(如启动窗口、资源字典)。
-
示例:指定启动窗口为MainWindow
<Application x:Class="WpfApp1.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="MainWindow.xaml"> <!-- 启动窗口 --> </Application>
-
-
MainWindow.xaml + MainWindow.xaml.cs
-
MainWindow.xaml
:主窗口的界面布局(XAML 描述)。 -
MainWindow.xaml.cs
:窗口的交互逻辑(C# 代码),与 XAML 通过x:Class
关联。
-
四、布局控件
布局控件用于管理界面中控件的排列方式,常用布局:
-
Grid(网格布局)
-
按行和列划分区域,最常用的布局控件。
-
示例:2 行 1 列的网格,包含一个按钮和文本框
<Grid> <Grid.RowDefinitions> <RowDefinition Height="50"/> <!-- 第一行高度50 --> <RowDefinition Height="*"/> <!-- 第二行占剩余空间 --> </Grid.RowDefinitions> <Button Grid.Row="0" Content="按钮"/> <!-- 放在第1行 --> <TextBox Grid.Row="1" Text="文本框"/> <!-- 放在第2行 --> </Grid>
-
-
StackPanel(栈式布局)
-
控件按水平(
Orientation="Horizontal"
)或垂直(默认)方向排列。 -
示例:垂直排列两个按钮
<StackPanel> <Button Content="按钮1" Margin="5"/> <Button Content="按钮2" Margin="5"/> </StackPanel>
-
-
Canvas(画布布局)
- 控件通过
Canvas.Left
和Canvas.Top
属性指定绝对位置,适合自定义绘制。
- 控件通过
五、常用控件
-
基础控件
-
Button
:按钮,响应点击事件。 -
TextBox
:文本输入框,Text
属性获取 / 设置内容。 -
Label
:静态文本显示,Content
属性设置文本。 -
CheckBox
:复选框,IsChecked
属性判断是否选中。 -
RadioButton
:单选按钮,同组内互斥(通过GroupName
分组)。
-
-
列表类控件
-
ListBox
:列表框,ItemsSource
绑定数据源,SelectedItem
获取选中项。 -
ComboBox
:下拉列表,用法类似ListBox
。
-
六、数据绑定
数据绑定是 WPF 的核心功能,实现控件与数据的自动同步。
-
基本语法
-
在 XAML 中用
{Binding 路径}
绑定数据,例如:
<TextBox Text="{Binding UserName}"/> <!-- 绑定到数据源的UserName属性 -->
-
-
设置数据源(DataContext)
-
需为控件或窗口指定
DataContext(数据源),通常是一个 C# 对象: // 后台代码 public class User { public string UserName { get; set; } = "张三"; } public MainWindow() { InitializeComponent(); this.DataContext = new User(); // 设置数据源 }
-
七、事件与命令
-
事件处理
-
XAML 中通过事件名="方法名"绑定事件,例如按钮点击:
<Button Content="点击" Click="Button_Click"/>
-
后台代码实现事件逻辑:
private void Button_Click(object sender, RoutedEventArgs e) { MessageBox.Show("按钮被点击了!"); }
-
-
命令(Command)
- 解耦控件与逻辑,适合 MVVM 模式,常用
ICommand
接口。
- 解耦控件与逻辑,适合 MVVM 模式,常用
八、样式与模板
-
样式(Style)
-
统一控件外观,可定义在Resources中复用:
<Window.Resources> <!-- 全局按钮样式 --> <Style TargetType="Button"> <Setter Property="Background" Value="LightBlue"/> <Setter Property="FontSize" Value="14"/> </Style> </Window.Resources> <!-- 使用样式(自动应用) --> <Button Content="样式按钮"/>
-
-
模板(Template)
-
自定义控件结构,例如将按钮改为圆形:
<Button Content="圆形按钮"> <Button.Template> <ControlTemplate TargetType="Button"> <Ellipse Fill="{TemplateBinding Background}" Width="100" Height="100"> <TextBlock Text="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center"/> </Ellipse> </ControlTemplate> </Button.Template> </Button>
-
九、动画基础
WPF 支持通过Storyboard
创建动画,示例:按钮宽度从 100 动画到 300
<Button Content="动画按钮" Width="100">
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetProperty="Width"
From="100" To="300" Duration="0:0:1"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
十、学习资源
掌握这些基础知识后,可进一步学习 MVVM 模式、自定义控件等高级内容。