WPF核心UI组件的功能、使用场景和基础示例

WPF(Windows Presentation Foundation)是微软推出的用于构建Windows桌面应用的UI框架,其UI组件(控件)体系丰富且灵活,支持样式定制、数据绑定、模板化等核心特性。下面按常用分类介绍核心UI组件的功能、使用场景和基础示例,帮助快速掌握它们的用法。

一、基础布局控件(容器控件)

布局控件是承载其他UI元素的容器,决定子元素的排列方式,是WPF界面的骨架。

控件 核心功能 适用场景
Grid 网格布局(行+列),最常用的布局控件 复杂界面(如表单、多模块页面)
StackPanel 线性布局(水平/垂直),子元素自动排列 简单列表、按钮组、工具栏
WrapPanel 自动换行的线性布局 标签云、动态生成的按钮列表
DockPanel 按方向(上/下/左/右)停靠子元素 带工具栏/状态栏的经典窗口布局
Canvas 绝对坐标布局(X/Y定位) 绘图、自定义位置的元素(如游戏)
UniformGrid 等大小的网格布局(行/列自动均分) 九宫格、计算器按键布局
示例:Grid + StackPanel 组合布局
xml 复制代码
<Window x:Class="WpfControlsDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="布局示例" Height="300" Width="400">
    <!-- Grid布局:2行1列 -->
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/> <!-- 行高自适应内容 -->
            <RowDefinition Height="*"/>    <!-- 剩余空间占满 -->
        </Grid.RowDefinitions>
        
        <!-- 第一行:StackPanel垂直排列按钮 -->
        <StackPanel Grid.Row="0" Orientation="Horizontal" Margin="10" Spacing="5">
            <Button Content="按钮1" Width="80"/>
            <Button Content="按钮2" Width="80"/>
            <Button Content="按钮3" Width="80"/>
        </StackPanel>
        
        <!-- 第二行:Canvas绝对定位文本 -->
        <Canvas Grid.Row="1" Background="LightGray">
            <TextBlock Text="绝对定位文本" Canvas.Left="50" Canvas.Top="30" FontSize="16"/>
        </Canvas>
    </Grid>
</Window>

二、基础交互控件

这类控件用于用户输入/操作,是和用户交互的核心。

1. Button(按钮)

最基础的交互控件,点击触发事件。

xml 复制代码
<!-- 普通按钮 -->
<Button Content="点击我" Width="100" Height="30" 
        Click="Button_Click"/> <!-- 绑定点击事件 -->

<!-- 带图标按钮(结合Image) -->
<Button Width="100" Height="30">
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
        <Image Source="icon.png" Width="16" Height="16" Margin="0 0 5 0"/>
        <TextBlock Text="保存"/>
    </StackPanel>
</Button>
2. TextBlock & TextBox
  • TextBlock:显示静态文本(不可编辑),支持富文本(字体、颜色、换行);
  • TextBox:输入/编辑文本(单行/多行)。
xml 复制代码
<!-- TextBlock -->
<TextBlock Text="用户名:" FontSize="14" Foreground="Black" 
           FontWeight="Bold" Margin="5"/>

<!-- TextBox(单行) -->
<TextBox Width="200" Height="30" PlaceholderText="请输入用户名" 
         Text="{Binding UserName}"/> <!-- 数据绑定 -->

<!-- TextBox(多行) -->
<TextBox Width="200" Height="100" AcceptsReturn="True" 
         TextWrapping="Wrap"/> <!-- 允许换行、自动换行 -->
3. CheckBox & RadioButton
  • CheckBox:多选控件(可勾选/取消);
  • RadioButton:单选控件(同一组内只能选一个)。
xml 复制代码
<!-- CheckBox -->
<StackPanel Margin="10">
    <CheckBox Content="记住密码" IsChecked="True"/> <!-- 默认勾选 -->
    <CheckBox Content="自动登录" IsChecked="{Binding AutoLogin}"/>
</StackPanel>

<!-- RadioButton(同一GroupName为一组) -->
<StackPanel Margin="10" Orientation="Horizontal">
    <RadioButton Content="男" GroupName="Gender" IsChecked="True"/>
    <RadioButton Content="女" GroupName="Gender" Margin="10 0 0 0"/>
</StackPanel>
4. ComboBox & ListBox
  • ComboBox:下拉选择框(单行显示,展开选);
  • ListBox:列表选择框(多行显示,支持单选/多选)。
xml 复制代码
<!-- ComboBox -->
<ComboBox Width="200" Height="30" SelectedIndex="0"> <!-- 默认选第1项 -->
    <ComboBoxItem Content="北京"/>
    <ComboBoxItem Content="上海"/>
    <ComboBoxItem Content="广州"/>
</ComboBox>

<!-- ListBox(多选) -->
<ListBox Width="200" Height="100" SelectionMode="Multiple"> <!-- 允许多选 -->
    <ListBoxItem Content="苹果"/>
    <ListBoxItem Content="香蕉"/>
    <ListBoxItem Content="橙子"/>
</ListBox>
5. DatePicker & TimePicker

用于选择日期/时间,简化日期输入。

xml 复制代码
<StackPanel Orientation="Horizontal" Margin="10">
    <DatePicker Width="200" Height="30" SelectedDate="2026-03-13"/> <!-- 默认日期 -->
    <TimePicker Width="150" Height="30" Margin="10 0 0 0" SelectedTime="09:00:00"/>
</StackPanel>

三、高级UI控件

适用于更复杂的场景(数据展示、导航、弹窗等)。

1. DataGrid

表格控件,用于展示和编辑结构化数据(支持排序、筛选、分页)。

xml 复制代码
<!-- 绑定数据源(后台需定义DataTable或集合) -->
<DataGrid x:Name="dgData" Width="400" Height="200" 
          AutoGenerateColumns="True" <!-- 自动生成列 -->
          CanUserSortColumns="True"   <!-- 允许排序 -->
          CanUserResizeColumns="True"/> <!-- 允许调整列宽 -->

后台代码(绑定数据源示例):

csharp 复制代码
public MainWindow()
{
    InitializeComponent();
    // 模拟数据源
    DataTable dt = new DataTable();
    dt.Columns.Add("ID", typeof(int));
    dt.Columns.Add("姓名", typeof(string));
    dt.Columns.Add("年龄", typeof(int));
    dt.Rows.Add(1, "张三", 25);
    dt.Rows.Add(2, "李四", 30);
    dgData.ItemsSource = dt.DefaultView; // 绑定到DataGrid
}
2. TabControl

选项卡控件,用于分栏展示不同内容(如浏览器标签页)。

xml 复制代码
<TabControl Width="400" Height="200">
    <TabItem Header="标签1"> <!-- 标签头 -->
        <TextBlock Text="标签1的内容" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </TabItem>
    <TabItem Header="标签2">
        <TextBox PlaceholderText="标签2的输入框" Margin="10"/>
    </TabItem>
</TabControl>
  • Menu:顶部菜单栏(如软件的文件/编辑菜单);
  • ContextMenu:右键菜单。
xml 复制代码
<!-- 顶部Menu -->
<Menu>
    <MenuItem Header="文件(F)">
        <MenuItem Header="新建(N)" Click="NewMenuItem_Click"/>
        <MenuItem Header="保存(S)" Click="SaveMenuItem_Click"/>
        <Separator/> <!-- 分隔线 -->
        <MenuItem Header="退出(E)" Click="ExitMenuItem_Click"/>
    </MenuItem>
    <MenuItem Header="编辑(E)">
        <MenuItem Header="复制(C)"/>
        <MenuItem Header="粘贴(V)"/>
    </MenuItem>
</Menu>

<!-- 右键ContextMenu(绑定到Grid) -->
<Grid>
    <Grid.ContextMenu>
        <ContextMenu>
            <MenuItem Header="刷新"/>
            <MenuItem Header="属性"/>
        </ContextMenu>
    </Grid.ContextMenu>
</Grid>
4. MessageBox(弹窗)

代码触发的消息提示框(无XAML,纯后台代码)。

csharp 复制代码
// 简单提示框
MessageBox.Show("操作成功!", "提示", MessageBoxButton.OK, MessageBoxImage.Information);

// 确认框(判断用户选择)
MessageBoxResult result = MessageBox.Show("是否删除该数据?", "警告", 
                                          MessageBoxButton.YesNo, MessageBoxImage.Warning);
if (result == MessageBoxResult.Yes)
{
    // 执行删除逻辑
}
5. ProgressBar & Slider
  • ProgressBar:进度条(显示任务进度);
  • Slider:滑动条(调节数值,如音量、亮度)。
xml 复制代码
<StackPanel Margin="10">
    <!-- 进度条(值范围0-100) -->
    <ProgressBar Width="300" Height="20" Value="50" Minimum="0" Maximum="100"/>
    
    <!-- 滑动条(绑定值) -->
    <Slider Width="300" Height="20" Minimum="0" Maximum="100" 
            Value="{Binding Volume}" TickFrequency="10" TickPlacement="BottomRight"/>
</StackPanel>

四、控件通用属性(核心)

所有WPF控件都继承自FrameworkElement,拥有通用属性,掌握这些能大幅提升使用效率:

  1. 布局属性Width/Height(宽高)、Margin(外边距)、Padding(内边距)、HorizontalAlignment/VerticalAlignment(对齐方式);
  2. 样式属性Background(背景色)、Foreground(前景色/文字色)、FontSize/FontWeight(字体大小/粗细)、BorderBrush/BorderThickness(边框色/边框宽度);
  3. 状态属性IsEnabled(是否可用)、IsVisible(是否可见)、IsReadOnly(是否只读,针对输入控件);
  4. 事件绑定Click(点击)、SelectionChanged(选择变更)、TextChanged(文本变更)等。

总结

  1. 布局优先:WPF界面开发先选布局控件(Grid最常用)搭建骨架,再填充交互控件;
  2. 核心分类:基础布局控件(容器)、基础交互控件(输入/操作)、高级控件(表格/选项卡/菜单)是WPF UI的核心;
  3. 通用属性:所有控件共享布局、样式、状态类属性,掌握这些能统一定制控件外观和行为。

ps:来源豆包

相关推荐
Wiktok4 小时前
WPF文件命名的核心规则
wpf
TeamDev4 小时前
使用 Docker 部署 DotNetBrowser 应用程序
运维·ui·docker·容器·桌面应用·dotnet·dotnetbrowser
Wiktok4 小时前
WPF.XAML文件属性解析
wpf
Wiktok4 小时前
WPF 中的 <Window> 和 <Application>根级标签讲解
wpf
Nile18 小时前
解密openclaw底层pi-mono架构系列一:5. pi-web-ui
前端·ui·架构
少云清1 天前
【UI自动化测试】8_TPshop项目实战 _APP-根据频道搜索新闻
ui
Wiktok1 天前
WPF几种布局的讲解
wpf
Bug 挖掘机1 天前
利用OpenClaw+飞书,AI驱动UI自动化测试实战案例来了
软件测试·功能测试·测试开发·ui·飞书
UI设计兰亭妙微2 天前
飞秒激光时域热反射测量系统软件UI界面设计
ui·ui设计公司