当前位置: 首页 > news >正文

c#WPF基础知识

一、WPF 基础概念

  1. 什么是 WPF

    • WPF(Windows Presentation Foundation)是微软推出的 UI 框架,用于开发 Windows 客户端应用程序。

    • 核心优势:基于 Direct3D 渲染,视觉效果比 WinForm 更丰富的视觉效果;支持界面与逻辑分离,便于维护。

    • 属于.NET Framework 的一部分(3.0 及以上版本),兼容.NET 生态系统。

  2. WPF 与 WinForm 的区别

    特性WPFWinForm
    渲染引擎Direct3D(硬件加速)GDI+(软件渲染)
    界面描述XAML(声明式)+ C#纯 C# 代码(命令式)
    数据绑定强大的内置数据绑定机制需手动实现数据同步
    扩展性支持自定义控件、模板、动画扩展能力有限

二、XAML 基础

  1. XAML 简介

    • 全称:Extensible Application Markup Language(可扩展应用程序标记语言)。

    • 作用:用标记语言描述界面,实现 “界面(XAML)” 与 “逻辑(C#)” 分离。

    • 文件格式:以.xaml为扩展名,本质是 XML 文件。

  2. 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 项目包含以下核心文件:

  1. 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>
      
  2. MainWindow.xaml + MainWindow.xaml.cs

    • MainWindow.xaml:主窗口的界面布局(XAML 描述)。

    • MainWindow.xaml.cs:窗口的交互逻辑(C# 代码),与 XAML 通过x:Class关联。

四、布局控件

布局控件用于管理界面中控件的排列方式,常用布局:

  1. 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>
      
  2. StackPanel(栈式布局)

    • 控件按水平(Orientation="Horizontal")或垂直(默认)方向排列。

    • 示例:垂直排列两个按钮

      <StackPanel><Button Content="按钮1" Margin="5"/><Button Content="按钮2" Margin="5"/>
      </StackPanel>
      
  3. Canvas(画布布局)

    • 控件通过Canvas.LeftCanvas.Top属性指定绝对位置,适合自定义绘制。

五、常用控件

  1. 基础控件

    • Button:按钮,响应点击事件。

    • TextBox:文本输入框,Text属性获取 / 设置内容。

    • Label:静态文本显示,Content属性设置文本。

    • CheckBox:复选框,IsChecked属性判断是否选中。

    • RadioButton:单选按钮,同组内互斥(通过GroupName分组)。

  2. 列表类控件

    • ListBox:列表框,ItemsSource绑定数据源,SelectedItem获取选中项。

    • ComboBox:下拉列表,用法类似ListBox

六、数据绑定

数据绑定是 WPF 的核心功能,实现控件与数据的自动同步。

  1. 基本语法

    • 在 XAML 中用

      {Binding 路径}

      绑定数据,例如:

      <TextBox Text="{Binding UserName}"/>  <!-- 绑定到数据源的UserName属性 -->
      
  2. 设置数据源(DataContext)

    • 需为控件或窗口指定

      DataContext(数据源),通常是一个 C# 对象:
      // 后台代码
      public class User {public string UserName { get; set; } = "张三";
      }public MainWindow() {InitializeComponent();this.DataContext = new User();  // 设置数据源
      }
      

七、事件与命令

  1. 事件处理

    • XAML 中通过事件名="方法名"绑定事件,例如按钮点击:

      <Button Content="点击" Click="Button_Click"/>
      
    • 后台代码实现事件逻辑:

      private void Button_Click(object sender, RoutedEventArgs e) { MessageBox.Show("按钮被点击了!"); }

  2. 命令(Command)

    • 解耦控件与逻辑,适合 MVVM 模式,常用ICommand接口。

八、样式与模板

  1. 样式(Style)

    • 统一控件外观,可定义在Resources中复用:

      <Window.Resources><!-- 全局按钮样式 --><Style TargetType="Button"><Setter Property="Background" Value="LightBlue"/><Setter Property="FontSize" Value="14"/></Style>
      </Window.Resources><!-- 使用样式(自动应用) -->
      <Button Content="样式按钮"/>
      
  2. 模板(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>

十、学习资源

  • 官方文档:WPF 文档

  • 布局详解:WPF 布局

  • 数据绑定:WPF 数据绑定

掌握这些基础知识后,可进一步学习 MVVM 模式、自定义控件等高级内容。

http://www.dtcms.com/a/507025.html

相关文章:

  • 云栖实录|阿里云 Milvus:AI 时代的专业级向量数据库
  • 科技网站小编账号运营竞争性谈判
  • 华为FreeBuds 7i空间音频不灵敏怎么办?
  • Java Stream 高级应用:优雅地扁平化(FlatMap)递归树形结构数据
  • git推送本地仓库到远程 以及 模拟多人协作
  • 【开题答辩实录分享】以《预约上门维修服务运营与数据分析系统的设计与实现》为例进行答辩实录分享
  • 数据结构7:栈和队列
  • SpringBoot的启动流程原理——小白的魔法引擎探秘
  • Vue3 + Element Plus 弹框树形结构首次打开不更新问题排查与解决
  • 我先做个网站怎么做网络推广技术外包
  • 互联网公司排名前十名名单seo整站优化更能准确获得客户
  • 网络运维学习笔记
  • Helm、HPA 与 Rancher:Kubernetes(十) 生态核心工具详解
  • Docker常见问题
  • 拟合优度:模型与数据的契合之度
  • 理解 Python 的有序字典 OrderedDict
  • 狙击生态的演化史:从抢跑到模型套利
  • 用C语言实现外观模式
  • Git三路合并算法的弊端
  • 网站模板文件扫描工作招聘58同城
  • 网站建设上线问题企业网站的推广方法有哪些
  • LeetCode:207. 课程表
  • Oracle EBS ERP开发——报表生成Excel标准模板设计
  • CANoe基础讲解02:掌握CANoe Trace窗口
  • Kanass V1.3.3版本发布,支持在线安装与消息配置
  • 第十七篇:本地模型部署:使用DeepSeek开源模型进行离线推理
  • 【STM32项目开源】基于STM32的智能家居环境监测系统
  • 串口AT指令控制EC20连接MQTT服务器
  • 如何实现企业网站推广的系统性网站建设腾讯课堂
  • 全网营销型的网站wordpress 开源吗