WPF之项目创建
文章目录
- 引言
- 先决条件
- 创建 WPF 项目步骤
- 理解项目结构
- XAML 与 C# 代码隐藏
- 第一个 "Hello, WPF!" 示例
- 构建和运行应用程序
- 总结
- 相关学习资源
引言
Windows Presentation Foundation (WPF) 是 Microsoft 用于构建具有丰富用户界面的 Windows 桌面应用程序的现代框架。它基于 .NET 技术,提供了强大的数据绑定、样式和模板化、硬件加速图形以及对多媒体的集成支持。与传统的 Windows Forms 相比,WPF 使用声明性的 XAML (Extensible Application Markup Language) 来定义界面布局和元素,而使用 C# 或 VB.NET 编写业务逻辑,实现了 UI 设计与后端逻辑的分离。
本篇博客将引导您完成使用 Visual Studio 创建第一个 WPF 项目的完整过程,并对项目结构和基本概念进行初步介绍。
先决条件
在开始之前,请确保您的开发环境满足以下条件:
- Visual Studio: 安装最新版本的 Visual Studio(推荐 Visual Studio 2022 或更高版本)。您可以从 Visual Studio 官网 下载 Community、Professional 或 Enterprise 版本。
- .NET 桌面开发工作负载: 在 Visual Studio 安装过程中,确保选中了 “NET 桌面开发” 工作负载。如果已安装 Visual Studio 但未包含此工作负载,可以通过 Visual Studio Installer 修改安装,添加该负载。
使用WPF开发勾选单个(.NET桌面开发)后点击安装
创建 WPF 项目步骤
按照以下步骤在 Visual Studio 中创建新的 WPF 应用程序项目:
-
启动 Visual Studio: 打开您安装好的 Visual Studio。
-
创建新项目: 在启动窗口中,选择 “创建新项目(Create a new project)”。
- 如果您已经打开了 Visual Studio,可以通过菜单栏
文件(File)
->新建(New)
->项目(Project...)
来创建。
- 如果您已经打开了 Visual Studio,可以通过菜单栏
-
选择模板: 在 “创建新项目” 对话框中,执行以下操作:
- 在顶部的搜索框中输入
WPF
。 - 从筛选出的模板列表中,选择 “WPF 应用程序(WPF Application)”。请确保选择的是 C# 模板(通常模板名称旁边会带有 C# 标识)。
- 点击 “下一步(Next)”。
- 在顶部的搜索框中输入
-
配置项目: 在 “配置新项目(Configure your new project)” 页面中:
- 项目名称(Project name): 输入您的项目名称,例如
MyFirstWpfApp
。 - 位置(Location): 选择项目文件存储的目录。
- 解决方案名称(Solution name): 默认与项目名称相同,您可以根据需要修改。解决方案是一个或多个项目的容器。
- 点击 “下一步(Next)”。
- 项目名称(Project name): 输入您的项目名称,例如
-
其他信息: 在 “附加信息(Additional information)” 页面中:
- 框架(Framework): 选择您希望使用的 .NET 框架版本(例如 .NET 8.0, .NET 7.0, .NET 6.0 等)。建议选择最新的 LTS(长期支持)版本或您项目需要的特定版本。
- 点击 “创建(Create)”。
Visual Studio 将会创建项目,并打开默认的主窗口设计器和相关的代码文件。
理解项目结构
成功创建项目后,您会在 “解决方案资源管理器(Solution Explorer)” 窗口中看到类似如下的文件结构:
主要文件说明:
App.xaml
: 应用程序的入口点声明文件。它定义了应用程序级别的资源(如全局样式)和启动设置。App.xaml.cs
:App.xaml
的 C# 代码隐藏文件。通常包含应用程序生命周期事件的处理逻辑(如启动OnStartup
、退出OnExit
等)。MainWindow.xaml
: 应用程序默认主窗口的 XAML 文件。这里定义了主窗口的 UI 布局和控件。MainWindow.xaml.cs
:MainWindow.xaml
的 C# 代码隐藏文件。包含与主窗口 UI 交互的事件处理程序和其他逻辑代码。.csproj
: 项目文件,包含了项目的配置信息、引用的库、包含的文件列表等。
(这是一个简化的表示,展示了 App 类与 MainWindow 类的基本关系)
XAML 与 C# 代码隐藏
WPF 的核心特性之一是使用 XAML 来定义用户界面。XAML 是一种基于 XML 的标记语言,允许您以声明方式创建 UI 元素、布局、数据绑定、样式等。
每个 .xaml
文件通常都有一个对应的 .xaml.cs
(或 .xaml.vb
)代码隐藏文件。代码隐藏文件包含了处理 UI 事件(如按钮点击、文本更改等)和操作 UI 元素的 C# 代码。
MainWindow.xaml
可能看起来像这样(初始状态):
对应的 MainWindow.xaml.cs
包含一个与 XAML 文件中 x:Class
指令关联的分部类 (partial class):
InitializeComponent()
方法由编译器根据 XAML 文件自动生成,负责加载 XAML 中定义的 UI 元素并初始化它们。
第一个 “Hello, WPF!” 示例
让我们修改默认项目,实现一个简单的交互:点击按钮后,在文本标签上显示问候语。
-
修改
MainWindow.xaml
:
打开MainWindow.xaml
文件。在<Grid>
标签内部添加一个StackPanel
、一个TextBlock
和一个Button
。<Window x:Class="MyFirstWpfApp.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:MyFirstWpfApp"mc:Ignorable="d"Title="My First WPF App" Height="200" Width="300"><Grid Margin="10"><StackPanel VerticalAlignment="Center"><TextBlock x:Name="GreetingText" Text="-" HorizontalAlignment="Center" Margin="0,0,0,10"/><Button Content="Click Me" Width="100" Click="GreetingButton_Click"/></StackPanel></Grid> </Window>
- 我们添加了一个
StackPanel
来垂直排列控件。 TextBlock
命名为GreetingText
,初始文本为-
。Button
的Content
设置为 “Click Me”,并指定了Click
事件的处理程序为GreetingButton_Click
。
- 我们添加了一个
-
修改
MainWindow.xaml.cs
:
打开MainWindow.xaml.cs
文件,在MainWindow
类中添加GreetingButton_Click
事件处理方法。using System.Windows;namespace MyFirstWpfApp {public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private void GreetingButton_Click(object sender, RoutedEventArgs e){GreetingText.Text = "Hello, WPF!"; // 修改 TextBlock 的文本}} }
- 当按钮被点击时,
GreetingButton_Click
方法会被调用。 - 该方法通过名称
GreetingText
访问到 XAML 中定义的TextBlock
,并将其Text
属性设置为 “Hello, WPF!”。
- 当按钮被点击时,
构建和运行应用程序
完成代码修改后,您可以构建并运行应用程序:
- 构建: 在 Visual Studio 菜单栏选择
生成(Build)
->生成解决方案(Build Solution)
(快捷键通常是Ctrl+Shift+B
)。检查 “输出(Output)” 窗口确保没有生成错误。 - 运行: 按
F5
键或点击工具栏上的绿色启动按钮(通常显示为 “Start” 或项目名称)。
应用程序窗口将会启动。点击 “Click Me” 按钮,您应该能看到窗口中的文本标签内容变为 “Hello, WPF!”。
总结
恭喜!您已经成功创建并运行了您的第一个 WPF 应用程序。本篇博客涵盖了使用 Visual Studio 创建 WPF 项目的基础步骤、项目结构的关键部分,并通过一个简单的示例演示了 XAML UI 定义和 C# 事件处理的基本交互。
WPF 是一个功能丰富且强大的框架,这仅仅是一个开始。接下来,您可以深入探索布局系统、数据绑定、样式与模板、命令、MVVM 模式等更高级的主题。
相关学习资源
- Microsoft Learn - WPF 概述
- Microsoft Learn - WPF 入门教程
- Microsoft Learn - XAML 概述 (WPF .NET)
- Microsoft Learn - WPF 中的布局
希望这篇入门指南对您学习 WPF 有所帮助!
相关文章:

WPF之项目创建
文章目录 引言先决条件创建 WPF 项目步骤理解项目结构XAML 与 C# 代码隐藏第一个 "Hello, WPF!" 示例构建和运行应用程序总结相关学习资源 引言 Windows Presentation Foundation (WPF) 是 Microsoft 用于构建具有丰富用户界面的 Windows 桌面应用程序的现代框架。它…...
Unity中数据储存
在Unity项目开发中,会有很多数据,有需要保存到本地的数据,也有直接保存在缓存中的临时数据,一般为了方便整个项目框架中各个地方能调用需要的数据,因此都会实现一个数据工具或者叫数据管理类,用来管理项目中所有的数据。 首先保存在缓存中的数据,比如用户信息,我们只需…...
第十一天 主菜单/设置界面 过场动画(Timeline) 成就系统(Steam/本地) 多语言支持
前言 对于刚接触Unity的新手开发者来说,构建完整的游戏系统往往充满挑战。本文将手把手教你实现游戏开发中最常见的四大核心系统:主菜单界面、过场动画、成就系统和多语言支持。每个模块都将结合完整代码示例,使用Unity 2022 LTS版本进行演示…...

AI数字人:未来职业的重塑(9/10)
摘要:AI 数字人凭借计算机视觉、自然语言处理与深度学习技术,从虚拟形象进化为智能交互个体,广泛渗透金融、教育、电商等多领域,重构职业生态。其通过降本提效、场景拓展与体验升级机制,替代重复岗位工作,催…...
Android插拔U盘导致黑屏问题排查
问题现象: 车机大屏偶先插拔带音乐的U盘,导致车机系统短暂黑屏的情况。 日志中可以看到vold进程unmount了两次分区,一次是U盘分区,一次是/storage/emulated/0分区: I vold : Start killProcesses: /mnt/media_rw/…...

深入解析Mlivus Cloud中的etcd配置:最佳实践与高级调优指南
作为大禹智库的向量数据库高级研究员,我在《向量数据库指南》一书中详细阐述了向量数据库的核心组件及其优化策略。今天,我将基于30余年的实战经验,深入剖析Mlivus Cloud中etcd这一关键依赖的配置细节与优化方法。对于希望深入掌握Mlivus Cloud的读者,我强烈建议参考《向量…...
分享一个可以批量巡检GET和POST接口的Shell脚本
一、场景痛点与需求分析 在分布式系统架构中,服务接口的可用性和稳定性直接影响业务连续性。当面临以下场景时,需批量巡检GET和POST接口: 上线验证:新版本发布后批量验证核心接口 故障恢复:异常数据修复后的批量重试…...

前端面试宝典---vue原理
vue的Observer简化版 class Observer {constructor(value) {if (!value || typeof value ! object) returnthis.walk(value) // 对对象的所有属性进行遍历并定义响应式}walk (obj) {Object.keys(obj).forEach(key > defineReactive(obj, key, obj[key]))} } // 定义核心方法…...

PyTorch卷积层填充(Padding)与步幅(Stride)详解及代码示例
本文通过具体代码示例讲解PyTorch中卷积操作的填充(Padding)和步幅(Stride)对输出形状的影响,帮助读者掌握卷积层的参数配置技巧。 一、填充与步幅基础 填充(Padding):在输入数据边缘…...
2025年Redis分片存储性能优化指南
一、分片规则与负载均衡 动态哈希分片 采用CRC16算法计算键哈希值,通过hash_slot CRC16(key) % 16384确定槽位分布,结合Redis Cluster自动管理槽位迁移。 总分片数按需动态调整,例如从16节点扩容至32节点时,触发槽位重分配以…...
【概念】什么是 JWT Token?
—什么是 JWT Token? JWT Token(JSON Web Token) 就是一张后端发给前端的小票,里面包含用户身份信息,用于做无状态认证(Stateless Authentication)。 每次前端访问后端接口,都拿着…...
部署大模型需要多少GPU显存?以DeepSeek R1部署为例
引言 部署大型语言模型(LLM)时究竟需要多少GPU显存?本文将进行一次简单测算。 如何计算 算法1 可以用一个简单的公式来计算显存占用(单位GB): 参数说明如下: 符号 含义 M 所需的 GPU 显存…...

用go从零构建写一个RPC(仿gRPC,tRPC)--- 版本1
希望借助手写这个go的中间件项目,能够理解go语言的特性以及用go写中间件的优势之处,同时也是为了更好的使用和优化公司用到的trpc,并且作者之前也使用过grpc并有一定的兴趣,所以打算从0构建一个rpc系统,对于生产环境已…...
Fedora 43 计划移除所有 GNOME X11 相关软件包
Fedora 43 计划移除所有 GNOME X11 相关软件包,这是 Fedora 项目团队为全面拥抱 Wayland 所做的重要决策。以下是关于此计划的详细介绍: 提案内容:4 月 23 日,Neal Gompa 提交提案,建议从 Fedora 软件仓库中移除所有 G…...

django之账号管理功能
账号管理功能 目录 1.账号管理页面 2.新增账号 3.修改账号 4.账号重置密码 5.删除账号功能 6.所有代码展示集合 7.运行结果 这一片文章, 我们需要新增账号管理功能, 今天我们写到的代码, 基本上都是用到以前所过的知识, 不过也有需要注意的细节。 一、账号管理界面 …...
搭建spark-local模式
要搭建Spark的local模式,你可以按照以下步骤进行操作(以在Linux系统上安装为例,假设你已经安装了Java环境): 1. 下载Spark安装包:访问Spark官方网站(https://spark.apache.org/downloads.html&a…...

月之暗面开源 Kimi-Audio-7B-Instruct,同时支持语音识别和语音生成
我们向您介绍在音频理解、生成和对话方面表现出色的开源音频基础模型–Kimi-Audio。该资源库托管了 Kimi-Audio-7B-Instruct 的模型检查点。 Kimi-Audio 被设计为通用的音频基础模型,能够在单一的统一框架内处理各种音频处理任务。主要功能包括: 通用功…...

IDEA配置将Servlet真正布署到Tomcat
刚开始只能IDEA运行完Servlet web application 并保持IDEA运行才能通过浏览器访问到我的Servlet,跟想象中的不一样,不应该是IDEA运行完项目以后只要打开Tomcat就能访问吗?事实时运行完项目只要关掉IDEA就不能再访问到应用了,而且T…...
删除新安装IBM Guardium Data Protection 12.1的baltimorecybertrustroot证书
登录web console,会显示 baltimorecybertrustroot证书过期警告。 采用下面的命令删除过期证书就可消除警告。 collector02.cpd.com> delete certificate keystore Select an alias from the list below to delete the corresponding certificate. Alias List:…...
【蓝桥杯】画展布置
画展布置 题目描述 画展策展人小蓝和助理小桥为即将举办的画展准备了 N N N 幅画作,其艺术价值分别为 A 1 , A 2 , … , A N A_1, A_2, \dots , A_N A1,A2,…,AN。他们需要从这 N N N 幅画中挑选 M M M 幅,并按照一定顺序布置在展厅的 M M …...
请求参数、路径参数、查询参数、Spring MVC/FeignClient请求相关注解梳理
目录 1 请求分类1.1 URL参数--查询参数1.2 URL参数--路径参数 2 请求相关注解2.1 RequestParam--查询参数2.2 PathVariable--路径参数2.3 RequestBody2.4 Param & RequestLine2.5 SpringMVC请求参数注解用在FeignClient里 使用SpringMVC处理http请求或使用FeignClient进行请…...
MySQL 详解之复制与集群:构建高可用与可扩展数据库架构
随着业务的发展,单一的数据库实例往往难以满足需求: 性能瓶颈: 读写请求量不断增加,单个服务器的 CPU、内存、磁盘、网络资源达到上限,尤其是读请求远大于写请求的场景。高可用性: 单个服务器一旦发生故障(硬件故障、操作系统问题、机房断电等),数据库服务将完全中断,…...

刚体运动 (位置向量 - 旋转矩阵) 笔记 1.1~1.3 (台大机器人学-林沛群)
目录 1. 理解刚体的“自由度”(Degrees of Freedom, DOF) 1.1 平面运动 (2D) 1.2 空间运动 (3D) 2. 统一描述:引入“体坐标系”(Body Frame) 3. 从“状态”到“运动”:引入微分 3.1 补充:…...

openAICEO山姆奥特曼未来预测雄文之三个观察
《三个观察》 山姆奥特曼 这篇文章主要讲的是关于AGI(人工通用智能)的未来发展及其对社会的影响,用大白话总结如下: 核心观点: AGI是什么? AGI是一种能像人类一样解决各种复杂问题的智能系统,比…...
Java 异常 SSLException: fatal alert: protocol_version 全解析与解决方案
在 Java 网络通信中,SSLException: fatal alert: protocol_version 是典型的 TLS/SSL 协议版本不兼容异常。本文结合 Java 官方规范、TLS 协议标准及实战经验,提供体系化解决方案,帮助开发者快速定位并解决协议版本冲突问题。 一、异常本质&…...

比象AI创作系统,多模态大模型:问答分析+AI绘画+管理后台系统
比象AI创作系统是新一代集智能问答、内容创作与商业运营于一体的综合型AI平台。本系统深度融合GPT-4.0/GPT-4o多模态大模型技术,结合实时联网搜索与智能分析能力,打造了从内容生产到商业变现的完整闭环解决方案。 智能问答中枢 系统搭载行业领先的对话…...
【2025 最新前沿 MCP 教程 03】基础构建模块:工具、资源与提示
文章目录 1. 开始啦2. 工具(模型控制):赋予 AI 行动能力3. 资源(应用控制):为 AI 提供关键上下文4. 提示(用户可控):优化 AI 交互5. 它们如何协同工作 1. 开始啦 欢迎来…...

Docker-高级使用
前言 书接上文Docker-初级安装及使用_用docker安装doccano-CSDN博客,我们讲解了Docker的基本操作,下面我们讲解的是高级使用,请大家做好准备! 大家如果是从初级安装使用过来的话,建议把之前镜像和搭载的容器数据卷里面…...

计算机网络 | Chapter1 计算机网络和因特网
💓个人主页:mooridy-CSDN博客 💓文章专栏:《计算机网络:自定向下方法》 大纲式阅读笔记_mooridy的博客-CSDN博客 🌹关注我,和我一起学习更多计算机网络的知识 🔝🔝 目录 …...
PowerBi中ALLEXCEPT怎么使用?
在 Power BI 的 DAX 中,ALLEXCEPT() 是一个非常重要的函数,用来实现**“在保留部分筛选条件的前提下,移除其他所有筛选器”**,它常用于 同比、占比、累计汇总 等分析中。 ✅ 一、ALLEXCEPT 是什么意思? 函数全称&…...