C# 使用 WinUI 3 項目模板創建桌面應用程序

文章目錄

  • 1. 概述
  • 2. 先決條件
  • 3. 創建項目步驟
  • 4. 項目結構簡介
  • 5. 代碼示例
    • 5.1. `MainWindow.xaml` (UI 定義)
    • 5.2. `MainWindow.xaml.cs` (邏輯代碼)
  • 6. 生成和運行應用程序
  • 7. 關鍵概念

1. 概述

本示例演示如何使用 Visual Studio 中的 “Blank App, Packaged (WinUI 3 in Desktop)” C# 項目模板創建一個簡單的 WinUI 3 桌面應用程序。這個應用程序將包含一個按鈕和一個文本塊,點擊按鈕后,文本塊的內容會發生改變。

2. 先決條件

  • Visual Studio 2022 或更高版本: 確保已安裝 “.NET Multi-platform App UI development” (MAUI) 工作負載,或者至少是 “Universal Windows Platform development” 工作負載,并確保 WinUI 3 模板可用。通常,安裝最新的 Windows App SDK 擴展會自動添加這些模板。
  • Windows App SDK: 確保已安裝最新版本的 Windows App SDK。Visual Studio 安裝程序通常會處理這個問題。
  • 啟用開發者模式: 在 Windows 設置中啟用開發者模式(設置 -> 更新和安全 -> 開發者選項 -> 開發者模式)。

3. 創建項目步驟

(1) 打開 Visual Studio。
(2) 點擊 “創建新項目 (Create a new project)”。
(3) 在搜索框中輸入 “WinUI”。
(4) 選擇 C# 版本的 空白應用,已打包(桌面版中的WinUI 3)“Blank App, Packaged (WinUI 3 in Desktop)” 模板。
* 注意: 不要選擇 UWP 版本的模板,也不要選擇 “Blank App, Packaged with WAP (WinUI 3 in Desktop)”(除非你有特定需求并了解其差異)。

項目模板
(5) 給項目命名(例如 MyWinUI3AppCS),選擇一個位置,然后點擊 “創建 (Create)”。

創建項目

(6) Visual Studio 可能會提示你選擇目標 Windows 版本和最低 Windows 版本。通常可以接受默認設置。

4. 項目結構簡介

創建項目后,你會看到以下關鍵文件和文件夾:

  • App.xaml / App.xaml.cs: 應用程序的入口點。App.xaml.cs 中的 OnLaunched 方法負責創建和顯示主窗口。
  • MainWindow.xaml / MainWindow.xaml.cs: 應用程序的主窗口。
    • MainWindow.xaml: 定義窗口的 UI 布局(使用 XAML)。
    • MainWindow.xaml.cs: 包含窗口的邏輯代碼(C#)。
  • Package.appxmanifest: 應用程序包的清單文件,包含應用程序的元數據、功能聲明等。

5. 代碼示例

我們將修改 MainWindow.xamlMainWindow.xaml.cs

5.1. MainWindow.xaml (UI 定義)

打開 MainWindow.xaml 文件,將其內容替換為以下 XAML 代碼:

<Windowx:Class="MyWinUI3AppCS.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="using:MyWinUI3AppCS"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"><StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center" Spacing="20"><TextBlock x:Name="myTextBlock" Text="Hello, WinUI 3!" FontSize="24" HorizontalAlignment="Center"/><Button x:Name="myButton" Content="Click Me" Click="MyButton_Click" HorizontalAlignment="Center"/></StackPanel>
</Window>

XAML 說明:

  • <Window>: 應用程序的主窗口根元素。
  • <StackPanel>: 一個布局控件,將其子元素垂直(Orientation="Vertical")或水平排列。
    • HorizontalAlignment="Center"VerticalAlignment="Center": 使 StackPanel 及其內容在窗口中居中。
    • Spacing="20": 設置子元素之間的間距。
  • <TextBlock x:Name="myTextBlock">: 用于顯示文本。
    • x:Name="myTextBlock": 為文本塊指定一個名稱,以便在 C# 代碼中引用它。
    • Text="Hello, WinUI 3!": 初始顯示的文本。
    • FontSize="24": 設置字體大小。
  • <Button x:Name="myButton">: 一個按鈕控件。
    • x:Name="myButton": 為按鈕指定名稱。
    • Content="Click Me": 按鈕上顯示的文本。
    • Click="MyButton_Click": 指定當按鈕被點擊時要調用的事件處理程序方法(在 C# 代碼中定義)。

5.2. MainWindow.xaml.cs (邏輯代碼)

打開 MainWindow.xaml.cs 文件,確保它包含以下代碼(模板通常會生成構造函數,我們主要添加事件處理程序):

using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Controls.Primitives;
using Microsoft.UI.Xaml.Data;
using Microsoft.UI.Xaml.Input;
using Microsoft.UI.Xaml.Media;
using Microsoft.UI.Xaml.Navigation;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;// To learn more about WinUI, the WinUI project structure,
// and more about our project templates, see: http://aka.ms/winui-project-info.namespace MyWinUI3AppCS
{/// <summary>/// An empty window that can be used on its own or navigated to within a Frame./// </summary>public sealed partial class MainWindow : Window{public MainWindow(){this.InitializeComponent();// Optional: Set a title for the windowthis.Title = "My First WinUI 3 App (C#)";}private void MyButton_Click(object sender, RoutedEventArgs e){myTextBlock.Text = "Button Clicked! Welcome!";}}
}

C# 代碼說明:

  • public sealed partial class MainWindow : Window: 定義了 MainWindow 類,它繼承自 Microsoft.UI.Xaml.Windowpartial 關鍵字表示該類的定義分布在多個文件中(XAML 生成的代碼和我們編寫的代碼)。
  • public MainWindow(): 類的構造函數。
    • this.InitializeComponent();: 非常重要! 這個方法由 XAML 編譯器生成,它負責加載 XAML 中定義的 UI 元素并將它們連接到代碼。必須在構造函數中首先調用它。
    • this.Title = "My First WinUI 3 App (C#)";: (可選) 設置窗口的標題欄文本。
  • private void MyButton_Click(object sender, RoutedEventArgs e): 這是在 XAML 中為按鈕的 Click 事件指定的處理程序。
    • myTextBlock.Text = "Button Clicked! Welcome!";: 當按鈕被點擊時,這行代碼會通過 myTextBlock (在 XAML 中定義的 TextBlockx:Name) 訪問該文本塊,并將其 Text 屬性更改為新的字符串。

6. 生成和運行應用程序

  1. 在 Visual Studio 頂部工具欄中,確保選擇了正確的啟動項目(應該是你剛創建的項目)。
  2. 選擇一個目標平臺(例如 x64x86)。
  3. 點擊 “啟動 (Start)” 按鈕(通常是一個綠色的播放箭頭)或按 F5
  4. 應用程序將會編譯并啟動。你會看到一個窗口,其中包含文本 “Hello, WinUI 3!” 和一個 “Click Me” 按鈕。點擊按鈕后,文本會變為 “Button Clicked! Welcome!”。

程序運行

程序點擊后

7. 關鍵概念

  • XAML (Extensible Application Markup Language): 用于聲明式地定義 WinUI 3 應用程序的用戶界面。
  • Code-Behind: 與 XAML 文件關聯的 C# (或 C++) 代碼文件,用于處理 UI 邏輯和事件。
  • Controls: UI 的構建塊,如 Button, TextBlock, TextBox, StackPanel 等。
  • Events: 用戶與 UI 交互時觸發的動作,如按鈕點擊 (Click)。
  • Windows App SDK: 提供了一組庫和工具,使桌面應用程序能夠使用現代 Windows UI (WinUI 3)、API 和平臺特性。
  • Packaged App: 應用程序被打包成 .msix 格式,可以通過 Microsoft Store 或旁加載方式分發和安裝。

打包后的目錄如下:
文件結構

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82931.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82931.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82931.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

設計模式簡述(十八)享元模式

享元模式 描述基本組件使用 描述 當內存中存在大量類似的對象時&#xff0c;可以考慮使用享元模式減少整體內存占用。 可以將相同的部分和不同的部分進行拆分&#xff0c;以達到多個對象共享相同部分內存的目的。 基本組件 通常享元對象通過共享的屬性映射一個享元對象。 公…

大數據狙擊金融欺詐——技術如何守護交易安全?

大數據狙擊金融欺詐——技術如何守護交易安全? 金融領域一直是欺詐行為的“重災區”,從傳統的信用卡盜刷到精心策劃的網絡詐騙,攻擊者不斷進化手法,使得防御變得越來越復雜。然而,大數據技術的出現,讓金融欺詐檢測從被動防守轉向主動狙擊,通過深度學習、行為分析和實時…

如何通過DNS解析實現負載均衡?

在當今的互聯網時代&#xff0c;隨著網絡應用的飛速發展&#xff0c;網站和各類在線服務面臨著海量的用戶請求。為了保障服務的高可用性和高性能&#xff0c;負載均衡技術應運而生。DNS&#xff08;域名系統&#xff09;負載均衡作為其中一種重要的實現方式&#xff0c;憑借其簡…

MySQL解決主從復制的報錯問題

MySQL 8.4 非 GTID 模式部分數據庫主從復制指南 在進行MySQL 8.4非GTID模式下部分數據庫主從復制時&#xff0c;以下是詳細的操作步驟以及對應的執行位置說明&#xff0c;還有報錯處理方法介紹&#xff1a; 操作步驟 1. 備份主庫指定數據庫&#xff08;db1、db2&#xff09;…

Linux的域名解析服務器

什么是DNS DNS&#xff08;Domain Name System&#xff09;是互聯網上的一項服務&#xff0c;它作為將域名和IP地址相互映射的一個分 布式數據庫&#xff0c;能夠使人更方便的訪問互聯網 DNS使用的是53端口&#xff0c; 通常DNS是以UDP這個較快速的數據傳輸協議來查詢的&…

vue 中綁定樣式 【class樣式綁定】

class 樣式綁定 在 Vue 中&#xff0c;可以通過 :class&#xff08;或簡寫 v-bind:class&#xff09;實現類名&#xff08;class&#xff09;樣式的綁定。Vue 提供了幾種常用的綁定方式&#xff0c;分別支持字符串、對象和數組語法。 綁定字符串 <div :class"active…

Unity3D 序列化機制:引擎內的應用場景和基本原理

前言 Unity3D 的序列化機制是其核心功能之一&#xff0c;用于在編輯器和運行時之間持久化數據、管理場景狀態、處理預制體&#xff08;Prefab&#xff09;以及實現跨平臺兼容性。以下是其應用場景和基本原理的詳細解析&#xff1a; 對惹&#xff0c;這里有一個游戲開發交流小…

Python 字典鍵 “三變一” 之謎

開頭&#xff1a;讀者的“玄學”字典謎題 上周&#xff0c;朋友發來了一段讓他抓耳撓腮的代碼&#xff1a; >>> {True: foo, 1: bar, 1.0: baz} {True: baz} “我明明定義了布爾True、整數1、浮點數1.0三個鍵&#xff0c;結果字典里只剩True一個鍵&#xff0c;值…

如何選擇 RabbitMQ、Redis 隊列等消息中間件?—— 深度解析與實戰評估

如何選擇 RabbitMQ、Redis 隊列等消息中間件?—— 深度解析與實戰評估 1. 引言 在現代分布式系統架構中,消息隊列(Message Queue,MQ) 作為解耦服務、異步處理和高效通信的關鍵組件,被廣泛應用于高并發、微服務和數據流處理場景。選擇合適的消息中間件不僅能提高系統的穩…

特征工程四:數據特征提取TfidfVectorizer的使用

TfidfVectorizer 深度解析 TfidfVectorizer 是 scikit-learn 中用于文本特征提取的核心工具&#xff0c;它將原始文本轉換為 TF-IDF 特征矩陣&#xff0c;是自然語言處理(NLP)和文本挖掘的基礎組件。 一、核心原理 1. TF-IDF 計算 TF (Term Frequency)&#xff1a;詞頻&…

c/c++爬蟲總結

GitHub 開源 C/C 網頁爬蟲探究&#xff1a;協議、實現與測試 網頁爬蟲&#xff0c;作為一種自動化獲取網絡信息的強大工具&#xff0c;在搜索引擎、數據挖掘、市場分析等領域扮演著至關重要的角色。對于希望深入理解網絡工作原理和數據提取技術的 C/C 開發者&#xff0c;尤其是…

PostgreSQL 的表連接方法

PostgreSQL 的表連接方法 PostgreSQL 提供了多種高效的連接算法&#xff0c;每種方法適用于不同的查詢場景。以下是 PostgreSQL 支持的四種主要表連接方法及其特點&#xff1a; 1 Nested Loop Join&#xff08;嵌套循環連接&#xff09; 工作原理 對外表的每一行&#xff0…

【Qt】qss語法詳解

QSS (Qt Style Sheets) 語法格式詳解 QSS 是 Qt 的樣式表語言&#xff0c;類似于 CSS&#xff0c;用于自定義 Qt 應用程序的外觀。以下是 QSS 的完整語法格式說明&#xff1a; 基本語法結構 selector {property: value;property: value;... }1. 選擇器 (Selectors) 基本選擇…

Azure資源創建與部署指南

本文將指導您如何在Azure平臺上創建和配置必要的資源,以部署基于OpenAI的應用程序。 資源組創建 資源組是管理和組織Azure資源的邏輯容器。 在Azure門戶頂端的查詢框中輸入"Resource groups"(英文環境)或"資源組"(中文環境)在搜索結果中點擊"資…

Java后端快速生成驗證碼

Hutool是一個小而全的Java工具類庫&#xff0c;它提供了很多實用的工具類&#xff0c;包括但不限于日期處理、加密解密、文件操作、反射操作、HTTP客戶端等。 核心工具類&#xff1a;CaptchaUtil&#xff0c;CaptchaUtil 是 Hutool 提供的一個工具類&#xff0c;用于創建各種類…

sql 備份表a數據到表b

備份表a數據到表b mysql CREATE TABLE sys_dict_240702 LIKE sys_dict;INSERT INTO sys_dict_240702 SELECT * FROM sys_dict;mssql select * into t_Dict_240702 from t_Dict

2.4GHz無線通信芯片選型指南:集成SOC與低功耗方案解析

今天給大家分享幾款2.4GHz無線通信芯片方案&#xff1a; 一、集成SOC芯片方案 XL2407P&#xff08;芯嶺技術&#xff09; 集成射頻收發機和微控制器&#xff08;如九齊NY8A054E&#xff09; 支持一對多組網和自動重傳 發射功率8dBm&#xff0c;接收靈敏度-96.5dBm&#xff08…

Tomcat與純 Java Socket 實現遠程通信的區別

Servlet 容器??&#xff08;如 Tomcat&#xff09; 是一個管理 Servlet 生命周期的運行環境&#xff0c;主要功能包括&#xff1a; ??協議解析??&#xff1a;自動處理 HTTP 請求/響應的底層協議&#xff08;如報文頭解析、狀態碼生成&#xff09;&#xff1b; ??線程…

[超級簡單]講解如何用PHP實現LINE Pay API!

在 PHP 中實現 LINE Pay API 之前我應該??做哪些準備&#xff1f;如何在 PHP 中實現 LINE Pay API&#xff1f; 目錄 [前提] 環境使用 PHP 實現 LINE Pay API 的準備工作使用 PHP 實現 LINE Pay API概括 [前提] 環境 這次我們將使用SandBox環境&#xff08;測試環境&a…

centos7.x下,使用寶塔進行主從復制的原理和實踐

操作原理&#xff1a; 一、主庫配置 1.修改 MySQL 配置文件 # 編輯主庫配置文件&#xff08;路徑根據實際系統可能不同&#xff09; vim /etc/my.cnf # 添加以下配置 [mysqld] server-id 1 # 唯一 ID&#xff0c;主庫設置為 1 log-bin mysql-bin …