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 项目的完整过程,并对项目结构和基本概念进行初步介绍。

先决条件

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

  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.mzph.cn/bicheng/78571.shtml

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

相关文章

JAVAEE初阶01

个人主页 JavaSE专栏 JAVAEE初阶01 操作系统 1.对下&#xff08;硬件&#xff09;管理各种计算机设备 2.对上&#xff08;软件&#xff09;为各种软件提供一个稳定的运行环境 线程 运行的程序在操作系统中以进程的形式存在 进程是系统分配资源的最小单位 进程与线程的关…

HTML快速入门-4:HTML <meta> 标签属性详解

<meta> 标签是 HTML 文档头部&#xff08;<head> 部分&#xff09;的重要元素&#xff0c;用于提供关于文档的元数据&#xff08;metadata&#xff09;。这些数据不会直接显示在页面上&#xff0c;但对浏览器、搜索引擎和其他服务非常重要。 常用属性 1. name 和 …

前端基础之《Vue(12)—插件封装》

一、插件封装 1、在Vue生态中&#xff0c;除了Vue本身&#xff0c;其它所有的与Vue相关的第三方包&#xff0c;都是插件 例子&#xff1a; import VueRouter form vue-router Vue.use(VueRouter) // 注册插件 2、如何封装Vue插件 &#xff08;1&#xff09;第一种写法 const…

TCP基础题:音乐播放列表管理系统

需求描述 服务器端 创建一个 TCP 服务器&#xff0c;监听本地的 9999 端口&#xff0c;支持多个客户端连接。维护一个音乐播放列表&#xff0c;每个音乐条目包含歌曲名称、歌手、时长等信息。能够处理客户端的以下请求&#xff1a; 添加音乐到播放列表&#xff1a;接收客户端发…

Verilog 语法 (二)

在掌握了 Verilog 的基础语法和常用程序框架之后&#xff0c;本节将带大家深入学习一些 高级设计知识点。这些内容包括&#xff1a; 阻塞赋值&#xff08;&#xff09;与非阻塞赋值&#xff08;<&#xff09;的区别及使用场景&#xff1b; assign 和 always 语句的差异&am…

OpenCV 图形API(61)图像特征检测------检测图像边缘的函数Canny()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 使用Canny算法在图像中查找边缘。 该函数在输入图像中查找边缘&#xff0c;并使用Canny算法在输出映射&#xff08;edges&#xff09;中标记它们…

ubantu中下载编译安装qt5.15.3

操作步骤如下&#xff1a; 克隆 Qt 仓库&#xff1a; git clone https://code.qt.io/qt/qt5.git cd qt5 切换到 Qt 5.15.3 标签&#xff1a; git checkout v5.15.3-lts-lgpl 初始化子模块&#xff1a; perl init-repository 配置和编译 Qt&#xff1a; ./configure -prefix $H…

毕业论文设计基本内容和要求:

毕业设计基本内容和要求&#xff1a; 研究内容 调查了解LAMP架构和PHP开发&#xff1b; 学习百度旅游调用的其他产品线服务并熟悉请求接口&#xff1b; 学习社区业务层规范&#xff1b; 设计并实现旅游主要模块&#xff1b; 技术指标 熟悉企业中流程运转的方式&#xff0c;…

【大语言模型】大语言模型(LLMs)在工业缺陷检测领域的应用

大语言模型&#xff08;LLMs&#xff09;在工业缺陷检测领域的应用场景正在快速扩展&#xff0c;结合其多模态理解、文本生成和逻辑推理能力&#xff0c;为传统检测方法提供了新的技术路径。以下是该领域的主要应用场景及相关技术进展&#xff1a; 1. 多模态缺陷检测与解释 视…

【AI插件开发】Notepad++ AI插件开发1.0发布和使用说明

一、产品简介 AiCoder是一款为Notepad设计的轻量级AI辅助插件&#xff0c;提供以下核心功能&#xff1a; 嵌入式提问&#xff1a;对选中的文本内容进行AI分析&#xff0c;通过侧边栏聊天界面与AI交互&#xff0c;实现多轮对话、问题解答或代码生成。对话式提问&#xff1a;独…

第2讲:R语言中的色彩美学——科研图表配色指南

目录 一、背景导引:科研图表为何需要“配色讲究”? 二、色彩基础认知:别让“红绿盲”错过你的科研成果 三、R语言中的配色库全景图 四、案例演示与代码实战 🎨案例1:ggplot2 + viridis 配色的热图 🎨案例2:MetBrewer 中的印象派色彩 五、技巧点拨:如何为SCI图…

基于Django的个性化股票交易管理系统

本项目基于Python3.6、Django2.1、MySql8.0&#xff08;最好不要使用5.6&#xff0c;字符集等方面均不兼容&#xff0c;否则导入数据库会出错&#xff09;与股票信息工具包TuShare实现。 创建或激活对应Python开发环境 这里使用了conda来管理环境&#xff0c;强烈推荐&#xf…

超越GPT-4?下一代大模型的技术突破与挑战

超越GPT-4&#xff1f;下一代大模型的技术突破与挑战 引言&#xff1a;大模型的演进历程 人工智能领域近年来最引人注目的发展莫过于大型语言模型(Large Language Models, LLMs)的快速进步。从GPT-3到GPT-4&#xff0c;再到如今各种宣称"超越GPT-4"的模型不断涌现&…

Js 之点击下拉搜索Ajax-Bootstrap-Select

一、效果图 二、文档 https://gitcode.com/gh_mirrors/aj/Ajax-Bootstrap-Select/tree/master 三、示例代码 引入插件js、css <link rel"stylesheet" href"{php echo MODULE_URL}template/lib/bootstrap-select/css/bootstrap-select.min.css"> <…

无线监控系统分类全解析:搭配视频融合平台EasyCVR开启高效监控

随着技术的发展&#xff0c;无线监控系统在家庭、小型企业、特定行业以及室外恶劣环境中的应用越来越广泛。本文将介绍几种常见的无线监控系统&#xff0c;分析其优缺点&#xff0c;并结合EasyCVR视频融合平台的功能&#xff0c;探讨如何优化无线监控系统的性能和应用。 一、主…

WebRTC服务器Coturn服务器中的通信协议

1、概述 作为WebRTC服务器&#xff0c;coturn通信协议主要是STUN和TURN协议 STUN&TURN协议头部都是20个字节,用 Message Type来区分不同的协议 |------2------|------2------|------------4------------|------------------------12-------------------------|-----------…

Vue Transition 组件详解:让元素动起来

文章目录 一、为什么需要 Transition 组件&#xff1f;二、核心工作原理三、基础用法&#xff1a;6个过渡类名四、进阶用法五、 JavaScript 钩子函数六、过渡模式&#xff08;Mode&#xff09;七、列表过渡&#xff08;TransitionGroup&#xff09;八、与第三方动画库结合&…

【Redis】有序集合类型Sortedset 常用命令详解

此类型和 set 一样也是 string 类型元素的集合&#xff0c;且不允许重复的元素 不同的是每个元素都会关联一个double类型的分数&#xff0c;redis正是通过分数来为集合中的成员进行从小到大的排序 有序集合的成员是唯一&#xff0c;但分数(score)却可以重复 1. zadd - 添加 语法…

微信小程序 van-dropdown-menu

点击其他按钮&#xff0c;关闭van-dropdown-menu下拉框 DropdownMenu 引入页面使用index.wxmlindex.scssindex.ts(重点)index.ts(全部) DropdownMenu 引入 在app.json或index.json中引入组件 "usingComponents": {"van-dropdown-menu": "vant/weapp…

C 语言内存分配方法及优缺点

在 C 语言开发中&#xff0c;内存分配的方式主要有三种&#xff1a;静态内存分配、栈内存分配和堆内存分配。每种分配方式都有其独特的特点、适用场景以及优缺点。 静态内存分配 静态内存分配是在编译时就确定好内存的分配&#xff0c;它主要用于定义全局变量和静态局部变量。…