WPF之项目创建

news2025/7/14 13:43:32

文章目录

    • 引言
    • 先决条件
    • 创建 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 项目的完整过程,并对项目结构和基本概念进行初步介绍。

先决条件

在开始之前,请确保您的开发环境满足以下条件:

  1. Visual Studio: 安装最新版本的 Visual Studio(推荐 Visual Studio 2022 或更高版本)。您可以从 Visual Studio 官网 下载 Community、Professional 或 Enterprise 版本。
  2. .NET 桌面开发工作负载: 在 Visual Studio 安装过程中,确保选中了 “NET 桌面开发” 工作负载。如果已安装 Visual Studio 但未包含此工作负载,可以通过 Visual Studio Installer 修改安装,添加该负载。
包含
未包含
安装 Visual Studio
选择工作负载
.NET 桌面开发
完成安装/修改
打开 Visual Studio Installer
修改 Visual Studio 安装

使用WPF开发勾选单个(.NET桌面开发)后点击安装
在这里插入图片描述

创建 WPF 项目步骤

按照以下步骤在 Visual Studio 中创建新的 WPF 应用程序项目:

  1. 启动 Visual Studio: 打开您安装好的 Visual Studio。

  2. 创建新项目: 在启动窗口中,选择 “创建新项目(Create a new project)”。

    • 如果您已经打开了 Visual Studio,可以通过菜单栏 文件(File) -> 新建(New) -> 项目(Project...) 来创建。
  3. 选择模板: 在 “创建新项目” 对话框中,执行以下操作:

    • 在顶部的搜索框中输入 WPF
    • 从筛选出的模板列表中,选择 “WPF 应用程序(WPF Application)”。请确保选择的是 C# 模板(通常模板名称旁边会带有 C# 标识)。
    • 点击 “下一步(Next)”。
      在这里插入图片描述
  4. 配置项目: 在 “配置新项目(Configure your new project)” 页面中:

    • 项目名称(Project name): 输入您的项目名称,例如 MyFirstWpfApp
    • 位置(Location): 选择项目文件存储的目录。
    • 解决方案名称(Solution name): 默认与项目名称相同,您可以根据需要修改。解决方案是一个或多个项目的容器。
    • 点击 “下一步(Next)”。
  5. 其他信息: 在 “附加信息(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: 项目文件,包含了项目的配置信息、引用的库、包含的文件列表等。
Creates/Shows on Startup
«Application»
App
+OnStartup() : void
+OnExit() : void
«Window»
MainWindow
+InitializeComponent() : void
#Button_Click(object sender, RoutedEventArgs e) : void

(这是一个简化的表示,展示了 App 类与 MainWindow 类的基本关系)

XAML 与 C# 代码隐藏

WPF 的核心特性之一是使用 XAML 来定义用户界面。XAML 是一种基于 XML 的标记语言,允许您以声明方式创建 UI 元素、布局、数据绑定、样式等。

每个 .xaml 文件通常都有一个对应的 .xaml.cs(或 .xaml.vb)代码隐藏文件。代码隐藏文件包含了处理 UI 事件(如按钮点击、文本更改等)和操作 UI 元素的 C# 代码。

MainWindow.xaml 可能看起来像这样(初始状态):

Alt

对应的 MainWindow.xaml.cs 包含一个与 XAML 文件中 x:Class 指令关联的分部类 (partial class):

在这里插入图片描述

InitializeComponent() 方法由编译器根据 XAML 文件自动生成,负责加载 XAML 中定义的 UI 元素并初始化它们。

第一个 “Hello, WPF!” 示例

让我们修改默认项目,实现一个简单的交互:点击按钮后,在文本标签上显示问候语。

  1. 修改 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,初始文本为 -
    • ButtonContent 设置为 “Click Me”,并指定了 Click 事件的处理程序为 GreetingButton_Click
  2. 修改 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!”。

构建和运行应用程序

完成代码修改后,您可以构建并运行应用程序:

  1. 构建: 在 Visual Studio 菜单栏选择 生成(Build) -> 生成解决方案(Build Solution) (快捷键通常是 Ctrl+Shift+B)。检查 “输出(Output)” 窗口确保没有生成错误。
  2. 运行: 按 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 有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2344019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI数字人:未来职业的重塑(9/10)

摘要&#xff1a;AI 数字人凭借计算机视觉、自然语言处理与深度学习技术&#xff0c;从虚拟形象进化为智能交互个体&#xff0c;广泛渗透金融、教育、电商等多领域&#xff0c;重构职业生态。其通过降本提效、场景拓展与体验升级机制&#xff0c;替代重复岗位工作&#xff0c;催…

深入解析Mlivus Cloud中的etcd配置:最佳实践与高级调优指南

作为大禹智库的向量数据库高级研究员,我在《向量数据库指南》一书中详细阐述了向量数据库的核心组件及其优化策略。今天,我将基于30余年的实战经验,深入剖析Mlivus Cloud中etcd这一关键依赖的配置细节与优化方法。对于希望深入掌握Mlivus Cloud的读者,我强烈建议参考《向量…

前端面试宝典---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中卷积操作的填充&#xff08;Padding&#xff09;和步幅&#xff08;Stride&#xff09;对输出形状的影响&#xff0c;帮助读者掌握卷积层的参数配置技巧。 一、填充与步幅基础 填充&#xff08;Padding&#xff09;&#xff1a;在输入数据边缘…

用go从零构建写一个RPC(仿gRPC,tRPC)--- 版本1

希望借助手写这个go的中间件项目&#xff0c;能够理解go语言的特性以及用go写中间件的优势之处&#xff0c;同时也是为了更好的使用和优化公司用到的trpc&#xff0c;并且作者之前也使用过grpc并有一定的兴趣&#xff0c;所以打算从0构建一个rpc系统&#xff0c;对于生产环境已…

django之账号管理功能

账号管理功能 目录 1.账号管理页面 2.新增账号 3.修改账号 4.账号重置密码 5.删除账号功能 6.所有代码展示集合 7.运行结果 这一片文章, 我们需要新增账号管理功能, 今天我们写到的代码, 基本上都是用到以前所过的知识, 不过也有需要注意的细节。 一、账号管理界面 …

月之暗面开源 Kimi-Audio-7B-Instruct,同时支持语音识别和语音生成

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

IDEA配置将Servlet真正布署到Tomcat

刚开始只能IDEA运行完Servlet web application 并保持IDEA运行才能通过浏览器访问到我的Servlet&#xff0c;跟想象中的不一样&#xff0c;不应该是IDEA运行完项目以后只要打开Tomcat就能访问吗&#xff1f;事实时运行完项目只要关掉IDEA就不能再访问到应用了&#xff0c;而且T…

刚体运动 (位置向量 - 旋转矩阵) 笔记 1.1~1.3 (台大机器人学-林沛群)

目录 1. 理解刚体的“自由度”&#xff08;Degrees of Freedom, DOF&#xff09; 1.1 平面运动 (2D) 1.2 空间运动 (3D) 2. 统一描述&#xff1a;引入“体坐标系”&#xff08;Body Frame&#xff09; 3. 从“状态”到“运动”&#xff1a;引入微分 3.1 补充&#xff1a;…

openAICEO山姆奥特曼未来预测雄文之三个观察

《三个观察》 山姆奥特曼 这篇文章主要讲的是关于AGI&#xff08;人工通用智能&#xff09;的未来发展及其对社会的影响&#xff0c;用大白话总结如下&#xff1a; 核心观点&#xff1a; AGI是什么&#xff1f; AGI是一种能像人类一样解决各种复杂问题的智能系统&#xff0c;比…

比象AI创作系统,多模态大模型:问答分析+AI绘画+管理后台系统

比象AI创作系统是新一代集智能问答、内容创作与商业运营于一体的综合型AI平台。本系统深度融合GPT-4.0/GPT-4o多模态大模型技术&#xff0c;结合实时联网搜索与智能分析能力&#xff0c;打造了从内容生产到商业变现的完整闭环解决方案。 智能问答中枢 系统搭载行业领先的对话…

Docker-高级使用

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

计算机网络 | Chapter1 计算机网络和因特网

&#x1f493;个人主页&#xff1a;mooridy-CSDN博客 &#x1f493;文章专栏&#xff1a;《计算机网络&#xff1a;自定向下方法》 大纲式阅读笔记_mooridy的博客-CSDN博客 &#x1f339;关注我&#xff0c;和我一起学习更多计算机网络的知识 &#x1f51d;&#x1f51d; 目录 …

开源项目实战学习之YOLO11:ultralytics-cfg-datasets-Objects365、open-images-v7.yaml文件(六)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 medical - pills.yaml 通常用于配置与医学药丸检测任务相关的参数和信息 Objects365.yaml 用于配置与 Objects365 数据集相关信息的文件。Objects365 数据集包含 365 个不同的物体类别…

蚂蚁集团“Plan A”重磅登场,开启AI未来

近期&#xff0c;蚂蚁集团面向全球高潜AI人才&#xff0c;正式发布顶级专项招募计划——“Plan A”。作为其“蚂蚁星”校招体系的全新升级模块&#xff0c;Plan A聚焦人工智能领域科研精英&#xff0c;旨在与全球高校AI研究者协同突破AGI前沿&#xff0c;共绘技术未来图谱。 蚂…

高中数学联赛模拟试题精选第18套几何题

在 △ A B C \triangle ABC △ABC 中, A B < A C AB< AC AB<AC, 点 K K K, L L L, M M M 分别是边 B C BC BC, C A C A CA, A B AB AB 的中点. △ A B C \triangle ABC △ABC 的内切圆圆心为 I I I, 且与边 B C BC BC 相切于点 D D D. 直线 l l l 经过线段…

Java 富文本转word

前言&#xff1a; 本文的目的是将传入的富文本内容(html标签&#xff0c;图片)并且分页导出为word文档。 所使用的为docx4j 一、依赖导入 <!-- 富文本转word --><dependency><groupId>org.docx4j</groupId><artifactId>docx4j</artifactId&…

多模态大语言模型arxiv论文略读(四十三)

InteraRec: Screenshot Based Recommendations Using Multimodal Large Language Models ➡️ 论文标题&#xff1a;InteraRec: Screenshot Based Recommendations Using Multimodal Large Language Models ➡️ 论文作者&#xff1a;Saketh Reddy Karra, Theja Tulabandhula …

GPU加速-系统CUDA12.5-Windows10

误区注意 查看当前系统可支持的最高版本cuda&#xff1a;nvidia-smi 说明&#xff1a; 此处显示的12.7只是驱动对应的最高版本&#xff0c;不一定是 / 也不一定需要是 当前Python使用的版本。但我们所安装的CUDA版本需要 小于等于它&#xff08;即≤12.7&#xff09;因此即使…

kafka课后总结

Kafka是由LinkedIn开发的分布式发布 - 订阅消息系统&#xff0c;具备高吞吐量、低延迟、可扩展性、持久性、可靠性、容错性和高并发等特性。其主要角色包括Broker、Topic、Partition、Producer、Consumer、Consumer Group、replica、leader、follower和controller。消息系统中存…