目录
水平方向:Horizontal(从左到右排列,一行排满后自动换到下一行)
竖直方向:Vertical(从上到下排列,一列排满后自动换到下一列)
[🌷 Label](#🌷 Label)
[ScrollBar :滚动条](#ScrollBar :滚动条)
[Memory Icons:](#Memory Icons:)
[1. 常用操作类](#1. 常用操作类)
[2. 导航类](#2. 导航类)
[3. 通讯类](#3. 通讯类)
[4. 社交类](#4. 社交类)
[5. 系统 / 设备类](#5. 系统 / 设备类)
[6. 编辑 / 文档类](#6. 编辑 / 文档类)
🌷Grid
表格容器:
它允许我们给界面分成若干列和若干行
设置行高列宽:
关键字:
RowDefinition:定义行高
ColumnDefinition:定义列宽
行和列通常都是需要几行定义几行,比如我们需要定义一个两行两列的表格就写几个RowDefinition,列也如此,详细可见下面的示例
width:
- Auto:自动分配
- *:自适应
- 具体数值也可以直接设置
表格索引:
我们通常按照几行几列直接来查找的,行和列的下标均从0开始
Grid.Row:行
Grid.Coumn:列
例如:我们想创建一个两行两列的表格,然后再在每个表格里面添加一些控件
XML
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="200"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button Content="按钮1" Grid.Row="0" Grid.Column="0"/>
<TextBox Grid.Row="0" Grid.Column="1"/>
<Button Content="按钮2" Grid.Row="1" Grid.Column="1" />
<StackPanel Orientation="Vertical" Grid.Row="1" Grid.Column="0">
<Button Width="194" Height="45" Content="按钮1" />
<Button Width="194" Height="45" Content="按钮2"/>
<Button Content="按钮3" Height="45" Width="200"/>
<Button Content="按钮4" Height="45" Width="200"/>
<Button Content="按钮5" Height="45" Width="200"/>
</StackPanel>
</Grid>
效果如下,这样就成功创建了一个两行两列的表格

🌷StackPanel
堆叠容器:
将其子元素按照单个方向堆叠起来一个接一个地排列
方向:Orientation
垂直排列:Vertical
水平排列:Horizontal
例如:我们在第二行第一列的表格中放入一个堆叠栈控件
XML
<StackPanel Orientation="Vertical" Grid.Row="1" Grid.Column="0">
<StackPanel Orientation="Horizontal">
<Button Content="按钮 1"/>
<Button Content="按钮 2"/>
<Button Content="按钮 3"/>
</StackPanel>
</StackPanel>
效果如下,可以看到我们把Vertical改成Horizontal就变成水平堆叠了

🌷DockPanel:
停靠容器:
DockPanel
的核心思想是"停靠" 。你可以想象一个码头,船只可以停靠在码头的上下左右不同位置。在 DockPanel
中,子控件可以"停靠"在面板的四个边缘(左、右、上、下)或填充剩余的中心区域。
属性:
停靠方式:Dock
Top:顶部
Bottom:底部
Left:左边
Right:右边
例如:我们在刚刚创建的表格中的第一行第二列添加一个DockPanel控件
XML
<DockPanel>
<Button Content="顶部按钮" DockPanel.Dock="Top"/>
<Button Content="左侧按钮" DockPanel.Dock="Left"/>
<Button Content="右侧按钮" DockPanel.Dock="Right"/>
<Button Content="底部按钮" DockPanel.Dock="Bottom"/>
<TextBox />
</DockPanel>
效果如图

🌷WrapPanel
换行容器:
WrapPanel 属于 布局控件(Panel) 的一种,它会按照指定的方向(水平或垂直)依次排列子元素,当空间不足时,自动将元素换行 或换列继续排列。
排列方向:Orientation
水平方向:Horizontal(从左到右排列, 一行排满后自动换到下一行**)**
竖直方向:Vertical(从上到下排列, 一列排满后自动换到下一列**)**
常用属性:
属性 | 说明 |
---|---|
Orientation | 排列方向:Horizontal (水平)或 Vertical (垂直) |
ItemWidth | 所有子元素的固定宽度(可选) |
ItemHeight | 所有子元素的固定高度(可选) |
Background | 背景色 |
Margin / Padding | 外边距 / 内边距 |
例如:设置一个自动换行容器,在里面添加几个按钮
XML
<WrapPanel Orientation="Horizontal" Background="LightGray">
<Button Content="按钮1" Width="100" Height="50" Margin="5"/>
<Button Content="按钮2" Width="80" Height="50" Margin="5"/>
<Button Content="按钮3" Width="120" Height="50" Margin="5"/>
<Button Content="按钮4" Width="90" Height="50" Margin="5"/>
<Button Content="按钮5" Width="110" Height="50" Margin="5"/>
</WrapPanel>
效果如下图:窗口宽度变化时,按钮会自动换行


缺点:
不支持滚动,如果控件超出限制,超出部分则会被截掉,为了解决这个问题,可以搭配着<ScrollViewer VerticalScrollBarVisibility="Auto">来使用
将ScrollViewer套在容器外面即可支持滚动
例如:
XML
<ScrollViewer VerticalScrollBarVisibility="Auto">
<WrapPanel Orientation="Horizontal">
<Button Content="按钮1" Width="100" Height="50" Margin="5"/>
<Button Content="按钮2" Width="100" Height="50" Margin="5"/>
<Button Content="按钮3" Width="100" Height="50" Margin="5"/>
<Button Content="按钮4" Width="100" Height="50" Margin="5"/>
<Button Content="按钮5" Width="100" Height="50" Margin="5"/>
<Button Content="按钮6" Width="100" Height="50" Margin="5"/>
<Button Content="按钮7" Width="100" Height="50" Margin="5"/>
</WrapPanel>
</ScrollViewer>
效果如下图,增加了一个滚动条可以滚动

🌷UniformGrid
均匀网格布局:
这是 WPF / UWP / Silverlight 等 XAML 技术中的一种布局容器,特点是将空间平均分成若干行和列,每个单元格大小相同。
核心属性:
属性 | 说明 |
---|---|
Rows | 行数(固定) |
Columns | 列数(固定) |
FirstColumn | 第一列的索引(默认 0) |
Background | 背景色 |
例如:
XML
<UniformGrid Rows="2" Columns="3" Background="LightGray">
<Button Content="按钮1"/>
<Button Content="按钮2"/>
<Button Content="按钮3"/>
<Button Content="按钮4"/>
<Button Content="按钮5"/>
<Button Content="按钮6"/>
</UniformGrid>
效果如下图:

🌷Canvas
画布布局:
Canvas 是 WPF / UWP / Silverlight 等 XAML 技术里的一种布局容器,它的特点是完全自由定位子元素,就像在一张空白画布上 "手工摆放" 控件。
核心定位属性:
属性 | 说明 |
---|---|
Canvas.Left | 子元素左边缘距离 Canvas 左边缘的像素数 |
Canvas.Top | 子元素上边缘距离 Canvas 上边缘的像素数 |
Canvas.Right | 子元素右边缘距离 Canvas 右边缘的像素数 |
Canvas.Bottom | 子元素下边缘距离 Canvas 下边缘的像素数 |
例如:
XML
<Canvas Background="LightGray" Width="300" Height="200">
<Button Content="左上角"
Canvas.Left="10" Canvas.Top="10"
Width="100" Height="30"/>
<Button Content="右下角"
Canvas.Right="10" Canvas.Bottom="10"
Width="100" Height="30"/>
<Button Content="中间"
Canvas.Left="100" Canvas.Top="80"
Width="100" Height="30"/>
</Canvas>
效果如下图:

🌷Menu
菜单控件:
Menu
是一个层次化的命令容器,通常以水平条的形式出现在窗口顶部(即"菜单栏"),包含一系列可选择的项目。用户点击一个项目时,可能会执行一个命令,也可能会展开一个包含更多项目的子菜单。
一个典型的菜单结构通常如下:
cs
[文件] [编辑] [视图] [帮助]
│ │ │ │
│ │ │ └── 查看帮助文档,关于...
│ │ │
│ │ └── 刷新,缩放,工具栏...
│ │
│ └── 复制,粘贴,查找...
│
└── 新建,打开,保存,退出...
关键属性:
MenuItem:
Header:
设置菜单文本
若有二级三级菜单可以用缩进来添加
例如:我们做一个简单的包含菜单的界面
XML
<Window x:Class="MyWPFtest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MyWPFtest"
mc:Ignorable="d"
Title="MainWindow" Height="443" Width="800">
<DockPanel>
<!-- 将菜单停靠在窗口顶部 -->
<Menu DockPanel.Dock="Top">
<!-- 文件菜单 -->
<MenuItem Header="_文件">
<!-- 下划线表示助记键,Alt+F可快速访问 -->
<MenuItem Header="_新建" Click="NewFile_Click"/>
<MenuItem Header="_打开..." Click="OpenFile_Click"/>
<Separator/>
<!-- 分隔线 -->
<MenuItem Header="_退出" Click="Exit_Click"/>
</MenuItem>
<!-- 编辑菜单 -->
<MenuItem Header="_编辑">
<MenuItem Header="_复制" Click="Copy_Click"/>
<MenuItem Header="_粘贴" Click="Paste_Click"/>
</MenuItem>
<!-- 帮助菜单 -->
<MenuItem Header="_帮助">
<MenuItem Header="_关于" Click="About_Click"/>
</MenuItem>
</Menu>
<!-- 窗口的其他内容 -->
<Grid>
<TextBlock Text="主内容区域" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
</DockPanel>
</Window>
其效果如下:

🌷TextBlock
标题框:
显示只读文本,不能直接编辑。
常用属性:
属性 | 作用 |
---|---|
Text | 显示的文本内容 |
FontSize | 字体大小 |
Foreground | 文字颜色 |
Background | 背景颜色 |
TextAlignment | 文本对齐方式(Left/Center/Right/Justify) |
TextWrapping | 是否自动换行(Wrap/NoWrap) |
TextTrimming | 文字超出时省略方式(CharacterEllipsis/WordEllipsis/None) |
FontWeight | 字体粗细(Normal/Bold 等) |
FontStyle | 字体样式(Normal/Italic) |
FontFamily | 字体 |
LineHeight | 行高 |
示例:
XML
<TextBlock Text="这是一个标题"
FontSize="20"
Foreground="Blue"
TextAlignment="Center"
TextWrapping="Wrap"/>
🌷TextBox:
文本框:
让用户输入和编辑文本。
常用属性:
属性 | 作用 |
---|---|
Text | 当前输入的文本 |
IsReadOnly | 是否只读 |
AcceptsReturn | 是否允许回车换行(多行模式) |
VerticalScrollBarVisibility | 垂直滚动条显示方式(Auto/Visible/Hidden/Disabled) |
HorizontalScrollBarVisibility | 水平滚动条显示方式 |
MaxLength | 最大输入长度 |
TextAlignment | 文本对齐方式 |
TextWrapping | 是否自动换行 |
Background / Foreground | 背景 / 前景色 |
BorderThickness | 边框厚度 |
BorderBrush | 边框颜色 |
示例:
XML
<TextBox Text="请输入用户名"
Width="200"
Height="30"
MaxLength="20"
IsReadOnly="False"
AcceptsReturn="True"
VerticalScrollBarVisibility="Auto"/>
🌷Button
按钮:
触发命令或事件,可显示文字、图片或复杂布局,支持点击事件和命令绑定。
常用属性:
属性 | 作用 |
---|---|
Content | 按钮内容(文字或其他控件) |
IsEnabled | 是否启用按钮(false 时不可点击) |
Background / Foreground | 背景 / 前景色 |
Width / Height | 宽 / 高 |
HorizontalAlignment / VerticalAlignment | 对齐方式 |
Margin | 外边距 |
Padding | 内边距 |
Command | 绑定的命令(MVVM) |
CommandParameter | 命令参数 |
示例
XML
<Button Content="点击我"
Width="100"
Height="35"
Background="LightBlue"
Click="Button_Click"/>
cs
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("按钮被点击了!");
}
🌷Label
标签:
显示标签文本,可关联输入控件
常用属性:
属性 | 作用 |
---|---|
Content | 标签文本或控件 |
Target | 关联的输入控件(快捷键聚焦) |
FontSize / Foreground | 字体大小 / 颜色 |
HorizontalContentAlignment | 内容水平对齐 |
VerticalContentAlignment | 内容垂直对齐 |
示例:
XML
<StackPanel>
<Label Content="_用户名:" Target="{Binding ElementName=txtUser}"/>
<TextBox x:Name="txtUser" Width="150"/>
</StackPanel>
🌷CheckBox
复选框:
允许用户进行多选,可三态(勾选 / 未勾选 / 半选),常用于选项列表
常用属性:
属性 | 作用 |
---|---|
IsChecked | 是否勾选(bool? 类型,支持 null 半选) |
Content | 显示文本或控件 |
IsThreeState | 是否支持三态(True/False/Null) |
Checked | 勾选事件 |
Unchecked | 取消勾选事件 |
Indeterminate | 半选事件 |
示例:
XML
<CheckBox Content="记住密码"
IsChecked="True"
IsThreeState="False"
Checked="CheckBox_Checked"/>
cs
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
MessageBox.Show("记住密码已勾选");
}
🌷RadioButton
单选按钮:
单选按钮,同组内只能选中一个,适用于性别选择、单选题等
常用属性:
属性 | 作用 |
---|---|
IsChecked | 是否选中 |
Content | 显示文本或控件 |
GroupName | 分组名称(同组互斥) |
IsEnabled | 是否启用 |
示例:
XML
<StackPanel>
<RadioButton Content="男" GroupName="Gender" IsChecked="True"/>
<RadioButton Content="女" GroupName="Gender"/>
</StackPanel>
🌷Slider
滑动条:
通过滑动选择数值,适用于音量调节、亮度控制、参数设置
常用属性:
属性 | 作用 |
---|---|
Value | 当前值 |
Minimum | 最小值 |
Maximum | 最大值 |
TickFrequency | 刻度间隔 |
IsSnapToTickEnabled | 是否吸附到刻度 |
Orientation | 方向(Horizontal/Vertical) |
AutoToolTipPlacement | 自动提示位置 |
AutoToolTipPrecision | 自动提示精度 |
示例:
XML
<Slider Minimum="0"
Maximum="100"
Value="50"
TickFrequency="10"
IsSnapToTickEnabled="True"
Orientation="Horizontal"
ValueChanged="Slider_ValueChanged"/>
cs
private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
Console.WriteLine($"当前值: {e.NewValue}");
}
🌷Image
图片控件:
显示图片,支持多种图片格式,可设置拉伸方式和透明度
常用属性:
属性 | 作用 |
---|---|
Source | 图片源(本地路径或资源路径) |
Stretch | 拉伸方式(None/Uniform/UniformToFill/Fill) |
Width / Height | 显示尺寸 |
Opacity | 透明度(0~1) |
IsVisible | 是否可见 |
StretchDirection | 拉伸方向(Both/UpOnly/DownOnly) |
示例:
XML
<!-- 本地文件 -->
<Image Source="C:\Images\logo.png" Stretch="Uniform" Width="200"/>
<!-- 项目资源 -->
<Image Source="pack://application:,,,/Assets/logo.png" Stretch="Uniform"/>
🌷Border
边框控件:
在 WPF / UWP / Silverlight / Xamarin 等 XAML 技术里,Border 不是一个布局面板,而是一个装饰性容器,主要用来给其他控件或布局加边框、背景、圆角等装饰效果。
基本概念:
- Border 只能有一个子元素(Child),如果需要给多个控件加边框,通常先把它们放进一个布局容器(如 Grid、StackPanel),再把这个容器放进 Border 里。
- 可以同时设置 边框颜色、粗细、圆角、背景色 等视觉属性。
常用属性
属性 | 说明 |
---|---|
BorderThickness | 边框厚度(可为单边设置,如 1,2,3,4 表示左上右下) |
BorderBrush | 边框颜色(SolidColorBrush、LinearGradientBrush 等) |
CornerRadius | 圆角半径(可为每个角单独设置) |
Background | 背景色 |
Padding | 内边距(内容与边框的间距) |
Child | 子元素(只能有一个) |
例如:
XML
<Border BorderThickness="2"
BorderBrush="Blue"
CornerRadius="8"
Background="LightYellow"
Padding="10">
<StackPanel>
<TextBlock Text="这是一个带边框的面板" FontSize="16" FontWeight="Bold"/>
<Button Content="点击我" Margin="5"/>
</StackPanel>
</Border>
效果如下:
🌷ViewBox
视图框:
它是 WPF / UWP / Silverlight 等 XAML 技术中的一个自适应缩放容器 ,主要作用是保持内容的比例不变,并自动缩放以适应可用空间。
基本概念:
- ViewBox 可以包含一个子元素(通常是布局容器或控件)。
- 当 ViewBox 的大小变化时,它会自动缩放内部内容,保持原始宽高比,防止变形。
- 常用于需要自适应不同屏幕尺寸或窗口大小的场景。
常用属性:
属性 | 说明 |
---|---|
Child | 子元素(只能有一个) |
Stretch | 拉伸方式(如何填充可用空间) |
StretchDirection | 拉伸方向限制(只放大、只缩小或双向) |
拉伸方式(Stretch)选项
值 | 说明 |
---|---|
Fill | 充满容器,不保持比例(可能变形) |
Uniform(默认) | 保持宽高比,缩放以适应容器(可能有留白) |
UniformToFill | 保持宽高比,填满容器(可能裁剪内容) |
None | 不缩放,保持原始大小 |
例如:我们在上面的Border代码示例前面加上ViewBox
添加前:

添加后:

🌷ScrollViewer:
滚动容器控件:
它就是 "给内容加滚动功能的容器"------ 比如长文本、大表格、多控件组成的复杂面板,只要放进 ScrollViewer,就能解决 "内容显示不下" 的问题。
核心属性:
自动管理滚动条:
ScrollViewer 会根据内容尺寸和自身尺寸的对比,自动显示 / 隐藏滚动条:
- 当内容宽度 > ScrollViewer 宽度 → 显示「水平滚动条(HorizontalScrollBar)」
- 当内容高度 > ScrollViewer 高度 → 显示「垂直滚动条(VerticalScrollBar)」
- 当内容完全能显示时 → 自动隐藏滚动条(避免占用空间)
支持手动控制滚动行为:
通过属性可以强制开启 / 关闭滚动条,或控制滚动逻辑,常用关键属性如下:
属性名 | 作用 | 可选值 / 示例 |
---|---|---|
HorizontalScrollBarVisibility |
控制水平滚动条显示规则 | - Auto (默认):内容超宽时显示- Visible :强制显示(即使内容不超宽)- Hidden :强制隐藏(内容超宽也不显示,无法横向滚动)- Disabled :禁用横向滚动(滚动条隐藏,且无法通过代码滚动) |
VerticalScrollBarVisibility |
控制垂直滚动条显示规则 | 同上(Auto /Visible /Hidden /Disabled ) |
CanContentScroll |
控制 "滚动单位" | - True :按 "逻辑单位" 滚动(如 ListBox 按 "项" 滚动)- False (默认):按 "物理像素" 滚动(平滑滚动,适合文本、图片) |
ScrollToHorizontalOffset(double) |
代码中控制横向滚动位置 | 示例:myScrollViewer.ScrollToHorizontalOffset(200); (横向滚动到 200 像素位置) |
ScrollToVerticalOffset(double) |
代码中控制纵向滚动位置 | 示例:myScrollViewer.ScrollToVerticalOffset(150); (纵向滚动到 150 像素位置) |
子控件:
ScrollBar :滚动条
ScrollViewer 会自动创建并管理 ScrollBar,无需手动写 ScrollBar 代码。
🌷Rectangle:
矩形控件:
在界面上绘制一个矩形(或正方形),本质是 "可视化的图形元素",而非容器(不能包裹其他控件),本质是 "可视化的图形元素",而非容器(不能包裹其他控件)。
核心属性:
属性名 | 作用 | 示例 / 说明 |
---|---|---|
Fill |
矩形内部填充色 | - Fill="Red" (纯色)- Fill="{StaticResource PrimaryColor}" (引用资源色)- Fill="Transparent" (完全透明,常用作交互区域) |
Stroke |
矩形边框颜色 | - Stroke="Black" (黑色边框)- Stroke="Transparent" (隐藏边框,默认值) |
StrokeThickness |
边框粗细(单位:像素) | - StrokeThickness="2" (2 像素粗的边框)- 若 StrokeThickness="0" ,即使设了 Stroke 也看不到边框 |
Width / Height |
矩形的固定宽 / 高 | - Width="200" Height="100" (200x100 像素的矩形)- 若不设置,矩形会默认 "撑满父容器"(比如放在 Grid 单元格中会占满整个单元格) |
RadiusX / RadiusY |
矩形圆角大小(X 轴 / Y 轴方向的圆角半径) | - RadiusX="10" RadiusY="10" (10 像素圆角的矩形,类似胶囊按钮)- 若为 0,则是直角矩形(默认) |
Margin |
矩形与其他控件的间距 | - Margin="10" (上下左右各 10 像素间距)- Margin="5,10,5,10" (上 5、右 10、下 5、左 10) |
HorizontalAlignment / VerticalAlignment |
矩形在父容器中的对齐方式 | - HorizontalAlignment="Center" (水平居中)- VerticalAlignment="Top" (垂直靠上)- 默认是 Stretch (拉伸填满父容器的对应方向)示例1 |
示例一:绘制一个 "圆角蓝色色块"(常用作按钮背景 / 卡片背景)
XML
<!-- 200x100 像素、10像素圆角、蓝色填充、无边框的矩形 -->
<Rectangle
Width="200"
Height="100"
Fill="#2196F3"
RadiusX="10"
RadiusY="10"
Stroke="Transparent" />
效果如下图:

示例二:绘制一个 "黑色边框、透明填充" 的矩形(常用作输入框边框)
XML
<Rectangle
Width="300"
Height="40"
Stroke="Black"
StrokeThickness="1"
Fill="Transparent" />
效果:一个空心的长方形边框,可放在 TextBox 外层作为自定义输入框样式。

🎈Icon网站:
Memory Icons:
Material Design Icons(MaterialDesignInXamlToolkit 里的 PackIcon
)包含 非常多的图标,几乎覆盖了常见的 UI 场景。
它的图标来自 Material Design Icons 项目 (开源,几百个图标),可以直接通过 Kind
属性调用。
常见的图标分类
1. 常用操作类
ContentCopy // 复制
ContentCut // 剪切
ContentPaste // 粘贴
Save // 保存
Print // 打印
Delete // 删除
Search // 搜索
Menu // 菜单
2. 导航类
ArrowLeft // 左箭头
ArrowRight // 右箭头
ArrowUp // 上箭头
ArrowDown // 下箭头
Home // 主页
Back // 返回
Forward // 前进
ChevronLeft // 左小箭头
ChevronRight // 右小箭头
3. 通讯类
Email // 邮件
Message // 消息
Phone // 电话
VideoCall // 视频通话
Share // 分享
4. 社交类
Facebook
Twitter
Instagram
Github
Linkedin
5. 系统 / 设备类
Wifi
Bluetooth
Battery
Bell // 通知
Settings // 设置
6. 编辑 / 文档类
Edit // 编辑
FileDocument // 文件
FileText // 文本文件
Folder // 文件夹
如何查看所有图标
如果你用的是 MaterialDesignInXamlToolkit,可以:
- 在 Visual Studio 里输入
<materialDesign:PackIcon Kind="
后,智能提示(IntelliSense) 会列出所有可用的图标名称。 - 或者去官网查看完整图标清单:
💡 小技巧如果你想快速预览某个图标,可以写:
<materialDesign:PackIcon Kind="IconName" Width="24" Height="24" Foreground="Black"/>
然后把 IconName
换成你想试的名字