====== WPF 控件与模板深度指南 ====== WPF (Windows Presentation Foundation) 的核心哲学是 **UI 与逻辑分离** 以及 **Lookless Control(无外观控件)**。这意味着控件的行为(如点击)与它的外观(长方形还是圆形)是完全解耦的。 本指南将详细讲解常用控件分类,并深入剖析核心机制:**模板 (Templates)**。 ===== 1. 常用控件分类体系 ===== 理解控件的父类有助于理解如何使用它们的内容属性。 ==== 1.1 布局控件 (Layout Controls) ==== 用于管理子元素的位置和大小。 ^ 控件名 ^ 用途 ^ 关键属性 ^ | **Grid** | 最强大的布局,通过行(Row)和列(Column)定位 | `RowDefinitions`, `ColumnDefinitions` | | **StackPanel** | 简单的堆叠布局(水平或垂直) | `Orientation` (Horizontal/Vertical) | | **WrapPanel** | 流式布局,空间不足时自动换行 | `Orientation` | | **DockPanel** | 停靠布局,将元素停靠在上下左右 | `DockPanel.Dock` (LastChildFill) | 点击[[https://www.tutorialspoint.com/wpf/wpf_datagrid.htm|这里]]查看 wpf控件的基本信息 ==== 1.3 条目控件 (Items Controls) ==== **特点**:包含**多个**子元素,通常用于显示集合数据。 **基类**:`System.Windows.Controls.ItemsControl` **核心属性**:`ItemsSource` (绑定数据源) 或 `Items` (手动添加)。 * **常见控件**:`ListBox`, `ListView`, `ComboBox`, `DataGrid`, `TreeView`。 ===== 2. 核心机制:模板 (Templates) ===== 这是 WPF 最强大也是最难的部分。模板决定了控件“长什么样”。 ==== 2.1 DataTemplate (数据模板) ==== **定义**:决定**数据对象**如何显示在 UI 上。 **适用场景**:当你绑定一个 `List` 到 `ListBox` 时,默认显示的是 `Person.ToString()`。使用 DataTemplate 可以将其显示为“姓名+头像”。 **关键属性**: * `ItemTemplate` (用于 ItemsControl) * `ContentTemplate` (用于 ContentControl) ==== 2.2 ControlTemplate (控件模板) ==== **定义**:决定**控件本身**的结构和外观。 **适用场景**:将方形按钮改成圆形按钮,或者重写 CheckBox 的勾选样式。 **核心概念**: - **TargetType**:指定模板应用于哪个控件。 - **TemplateBinding**:将模板内的属性绑定到控件对外的属性(如将模板内的矩形颜色绑定到 Button 的 Background)。 - **ContentPresenter**:**至关重要**。它是占位符,用来显示控件的 `Content`。如果不写它,按钮上的文字就会消失。 - **Triggers (触发器)**:在模板内部处理交互(如鼠标悬停变色)。