dameihuaxia 发表于 前天 09:52

什么是 WPF 技术?什么是 WPF 样式?下载、安装、配置、基本语法简介教程


1 | WPF 技术概览
1.1 诞生背景
WPF(Windows Presentation Foundation)最早随 .NET Framework 3.0(代号 Avalon)在 2006 年推出,核心目标是把 矢量渲染、数据绑定、动画、多媒体 等 UI 能力统一到一套声明式标记语言 XAML(eXtensible Application Markup Language)之上。

1.2 架构速览
App.xaml ─┬─ 资源(ResourceDictionary)
          └─ MainWindow.xaml → 视觉层(Visual Tree)
                         └─ 渲染线程 → DirectX → GPU
逻辑树 / 视觉树:分别决定控件的行为层次与像素绘制顺序
依赖属性 (DP):在运行时可数据绑定、动画或样式化的扩展属性系统
数据绑定:观测者模式 + LINQ,天然支持 MVVM
1.3 与 WinForms / UWP / MAUI 的差异
特性        WPF        WinForms        UWP/WinUI        .NET MAUI
渲染管线        DirectX (矢量)        GDI+ (栅格)        DirectComposition        Skia/平台原生
XAML        ✔        ✖        ✔        ✔
跨平台        Windows        Windows        Windows        Windows/macOS/iOS/Android
社区资源        ★★★★★        ★★★        ★★★★        ★★
2 | WPF 样式与资源体系
2.1 为什么需要样式?
样式 (Style) 把 视觉一致性 与 行为强化 拆分到可复用的字典,提高主题切换与组件化效率。

2.2 资源 (Resource) 基石
<Color x:Key="PrimaryColor">#FF4CAF50</Color>
<SolidColorBrush x:Key="PrimaryBrush" Color="{StaticResource PrimaryColor}" />
资源查找顺序:元素 → 父级 → ResourceDictionary.MergedDictionaries → ThemeDictionary → 系统

2.3 Style 语法
<Style TargetType="Button">
<Setter Property="Background" Value="{StaticResource PrimaryBrush}" />
<Setter Property="FontWeight" Value="SemiBold" />
<Style.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
      <Setter Property="Opacity" Value="0.85"/>
    </Trigger>
</Style.Triggers>
</Style>
2.4 ControlTemplate vs DataTemplate
模板类型        用途        典型场景
ControlTemplate        重绘控件外观        自定义 ToggleSwitch
DataTemplate        数据到 UI 的映射        列表项、树节点
3 | 环境准备:下载、安装与配置
步骤        说明
1. 安装 .NET SDK 8.0.x → dotnet.microsoft.com       
2. 安装 Visual Studio 2022 (17.9+),勾选 “.NET 桌面开发” 工作负载       
3. 可选:安装 .NET Upgrade Assistant 扩展(迁移旧项目)       
4. 验证:dotnet --list-sdks,应至少列出 8.0.xxx       
若仅用 CLI:winget install Microsoft.DotNet.SDK.8,并执行 dotnet new wpf -o HelloWpf.

4 | 创建第一个 WPF 项目
4.1 Visual Studio 向导
文件 ➜ 新建 ➜ 项目
选择 “WPF 应用 (.NET)” 模板
目标框架选 .NET 8.0 (Long-term support)
生成后结构:
├─ App.xaml / App.xaml.cs
├─ MainWindow.xaml / MainWindow.xaml.cs
└─ 项目名.csproj
4.2 CLI 一把梭
dotnet new wpf -n HelloWpf
cd HelloWpf
dotnet run
5 | XAML 基本语法速查
概念        示例        说明
命名空间        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"        设计时支持
布局        <StackPanel Orientation="Horizontal">        Panel 系列:Grid/Stack/Canvas…
绑定        Text="{Binding UserName}"        默认 OneWay,可选 Mode
Markup 扩展        {StaticResource PrimaryBrush}        用 {} 包裹的轻量代码
事件        <Button Click="OnClick">        也可用命令 Command="{Binding SaveCmd}"
6 | 样式实战:从「Hello Style」到主题切换
6.1 全局按钮样式
<!-- App.xaml -->
<Application.Resources>
<Style TargetType="Button" x:Key="RoundedBtn">
    <Setter Property="CornerRadius" Value="12"/>
    <Setter Property="Padding" Value="12,6"/>
</Style>
</Application.Resources>
使用:<Button Style="{StaticResource RoundedBtn}" Content="保存"/>

6.2 动态主题
<Application.Resources>
<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="Themes/Light.xaml"/>
      <ResourceDictionary Source="Themes/Dark.xaml"/>
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
在运行时切换 MergedDictionaries 顺序即可实现亮/暗主题。

6.3 社区样式库
MahApps.Metro – 现代化 Metro 风格
MaterialDesignInXamlToolkit – 谷歌 Material 3 Design
FluentWPF – 借力 WinUI Acrylic 效果
7 | 构建、发布与部署
需求        指令 / 选项
调试        F5 或 dotnet run
Release 构建        dotnet publish -c Release
自包含 EXE        --self-contained true -p:PublishSingleFile=true
裁剪/Trim        -p:PublishTrimmed=true
版本号        <Version Prefix="1.2.0" /> 写入 .csproj
8 | 性能优化与最佳实践
虚拟化 (VirtualizingStackPanel):大数据列表务必开启
避免布局抖动:最外层使用 Grid 而非 StackPanel
缓存复杂控件:CacheMode="BitmapCache"
绑定调试:PresentationTraceSources.TraceLevel=High
9 | 常见坑与排查技巧
症状        解决方案
“UI 线程被冻结”        用 BackgroundWorker / async-await 下放耗时任务
“Image 不显示”        确认 Build Action=Resource 且 Uri 格式正确
“找不到资源键”        检查字典加载顺序,优先级可用 x:Shared="False" 临时分隔
DPI 模糊        设置 UseLayoutRounding="True" + <Window SizeToContent="WidthAndHeight">
10 | 参考链接与延伸阅读

lihongkun16 发表于 昨天 09:06

什么是 WPF 技术?什么是 WPF 样式?下载、安装、配置、基本语法简介教程

zxopenhl 发表于 昨天 09:34

什么是 WPF 技术
页: [1]
查看完整版本: 什么是 WPF 技术?什么是 WPF 样式?下载、安装、配置、基本语法简介教程