c#WPF基础知识

一、WPF 基础概念

  1. 什么是 WPF

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

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

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

  2. WPF 与 WinForm 的区别

    特性 WPF WinForm
    渲染引擎 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>

十、学习资源

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

相关推荐
新手村领路人几秒前
c++ opencv缺少openh264-1.8.0-win64.dll
开发语言·c++
周杰伦fans1 分钟前
C# - 直接使用 new HttpClient() 和使用 HttpClientFactory 的区别
开发语言·c#
kyle~2 分钟前
C++ --- noexcept关键字 明确函数不抛出任何异常
java·开发语言·c++
不知所云,3 分钟前
6. c++ 20 Modules 使用
开发语言·c++20·c++ modules
沐浴露z4 分钟前
详解Java ArrayList
java·开发语言·哈希算法
x***B4115 分钟前
Rust unsafe代码规范
开发语言·rust·代码规范
北郭guo8 分钟前
Java设计模式 【理论+代码实现】 让你从小白到大佬的蜕变
java·开发语言·设计模式
MediaTea12 分钟前
Python 库手册:gc 垃圾回收
java·开发语言·jvm·python·算法
j***121515 分钟前
java进阶1——JVM
java·开发语言·jvm
JienDa2 小时前
JienDa聊PHP:小红书仿站实战深度架构全解析
开发语言·架构·php