C# WPF入門學習(四)—— 按鈕控件

上期介紹了WPF的實現架構和原理,之后我們開始來使用WPF來學習各種控件。

一、嘗試插入一個按鈕(方法一)

1. VS2019 在界面中,點擊工具欄中的視圖,在下拉菜單中選擇工具箱。

至于編譯器中的視圖怎么舒服怎么來布置,我也會出一期文章講述我的編譯器界面如何布局的,新手和強迫癥到時候可以來參考參考。

2. 言歸正傳,打開工具箱界面之后,我們找到button按鍵控件,拖入進來。

這樣,一個按鍵就創建好了,但是如何才能修改屬性變成左下角的按鍵的樣式呢?那就需要修改XAML了

XAML 是一種強大且靈活的標記語言,適用于創建現代化、響應迅速的 Windows 應用程序界面。它的聲明式語法和與 C# 的緊密集成,使其成為 WPF 和 UWP 開發的核心工具。通過學習 XAML,開發者可以更高效地設計和實現復雜的 UI 需求。

二、在XAML中插入一個button(方法二)

在可視化UI下面有一個xaml代碼編輯器,在編輯器中可以更改代碼和增刪代碼來改變布局,紅框就是XAML代碼編輯區。


XAML格式和內容編輯:

1. XAML中的Window元素

<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="350" Width="525">
</Window>

<Window> 元素是 WPF 中一個頂級容器,表示一個窗口。它通常是一個應用程序的主窗口或彈出窗口。這個元素包含了一些屬性,用于定義窗口的外觀和行為。

x:Class: 是一個 XAML 語言的特性,指定了這個 XAML 文件所對應的后臺代碼類。在例子中,x:Class="WpfApp.MainWindow" 指定了窗口的后臺代碼類是 WpfApp.MainWindow。這個類位于 MainWindow.xaml.cs 文件中,并包含窗口的邏輯代碼。

xmlns: 定義了 XAML 文件中使用的命名空間。xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation":這是默認的 WPF 命名空間,包含了 WPF 中的各種控件和功能。

xmlns:x: 定義了 XAML 的命名空間,包含 XAML 語言的功能。xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml":這是 XAML 命名空間,提供了如 x:Classx:Namex:Key 等 XAML 語言功能。

Title: 定義窗口的標題欄文本。Title="MainWindow" 將窗口的標題設置為 "MainWindow"。

HeightWidth: 定義窗口的高度和寬度(以像素為單位)。Height="350"Width="525" 設置了窗口的初始大小。

這是完整的一個窗口的界面描述代碼。

<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="350" Width="525"><!-- 這里可以添加更多的控件和布局 --><Grid><Button Content="Click Me" Width="100" Height="50" HorizontalAlignment="Center" VerticalAlignment="Center"Click="Button_Click"/></Grid>
</Window>

2. XAML中的Grid元素

<Grid><Button Content="Button" HorizontalAlignment="Left" Margin="366,99,0,0" VerticalAlignment="Top" Width="99" Height="38"/><Button Content="XAML創建的按鈕" HorizontalAlignment="Center" VerticalAlignment="Center" Width="200" Height="30"></Button>
</Grid>

3. Button元素

當我們會創建一個按鈕元素之后,在側邊的屬性欄中可以改文字、顏色、背景等屬性。那么如果圓角這種沒有的屬性如何更改和美化呢(畢竟做出來是給人看的)?直接粘代碼:

<Button x:Name="myButton" Content="Click Me"Width="104" Height="69"HorizontalAlignment="Center" VerticalAlignment="Center"FontSize="16" FontWeight="Bold"Background="LightBlue" Foreground="White"BorderBrush="Blue" BorderThickness="2"Click="MyButton_Click" Margin="18,230,399,25"><Button.Style><Style TargetType="Button"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="Button"><Grid><Ellipse x:Name="ellipse" Fill="{TemplateBinding Background}" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="{TemplateBinding BorderThickness}"/><ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/></Grid><ControlTemplate.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter TargetName="ellipse" Property="Fill" Value="SkyBlue"/></Trigger><Trigger Property="IsPressed" Value="True"><Setter TargetName="ellipse" Property="Fill" Value="SteelBlue"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style></Button.Style></Button>

像上面的代碼實現的效果是什么樣的呢?

x:Name="myButton"          <!-- 設置按鈕的名稱為myButton,便于在代碼后端引用 -->Content="Click Me"         <!-- 按鈕上顯示的文字內容 -->Width="104" Height="69"     <!-- 設置按鈕的寬度和高度 -->HorizontalAlignment="Center" VerticalAlignment="Center"  <!-- 讓按鈕在容器中水平和垂直居中對齊 -->FontSize="16" FontWeight="Bold"   <!-- 設置按鈕文字的字體大小和加粗 -->Background="LightBlue" Foreground="White"  <!-- 按鈕的背景色為淺藍色,前景色(文字顏色)為白色 -->BorderBrush="Blue" BorderThickness="2"      <!-- 設置按鈕邊框顏色為藍色,邊框厚度為2 -->Click="MyButton_Click"             <!-- 指定按鈕被點擊時執行的事件處理方法 -->Margin="18,230,399,25">           <!-- 設置按鈕的外邊距,順序為左、上、右、下 -->
  <!-- 自定義Button的樣式 --><Button.Style><Style TargetType="Button"> <!-- 定義一個針對Button類型的樣式 --><!-- 重寫Button的控制模板 --><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="Button"><!-- 使用Grid布局來包含按鈕的內容 --><Grid><!-- 創建一個橢圓用于自定義按鈕的背景形狀 --><Ellipse x:Name="ellipse" Fill="{TemplateBinding Background}" <!-- 綁定到按鈕背景色屬性 -->Stroke="{TemplateBinding BorderBrush}" <!-- 綁定到按鈕邊框色屬性 -->StrokeThickness="{TemplateBinding BorderThickness}"/> <!-- 綁定到按鈕邊框厚度屬性 --><!-- 內容展示器,用于放置按鈕上的內容(如文本) --><ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/></Grid><!-- 添加觸發器來改變按鈕狀態時的外觀 --><ControlTemplate.Triggers><!-- 鼠標懸停時改變橢圓背景色 --><Trigger Property="IsMouseOver" Value="True"><Setter TargetName="ellipse" Property="Fill" Value="SkyBlue"/></Trigger><!-- 按鈕被按下時改變橢圓背景色 --><Trigger Property="IsPressed" Value="True"><Setter TargetName="ellipse" Property="Fill" Value="SteelBlue"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style></Button.Style>

這些就是代碼的詳細解釋了。

總結一下:

了解如何在WPF應用程序中實現按鈕的創建與自定義,通過Visual Studio 2019的圖形界面操作及深入XAML代碼編輯,展示了按鈕控件的基本應用與進階樣式調整技巧。也介紹了如何從工具箱中添加一個按鈕,和手動寫代碼放置一個按鈕。介紹了自定義按鈕的代碼實現。

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

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

相關文章

Cocos Creator 幀動畫播放組件制作詳解

Cocos Creator 是一個強大的游戲開發工具&#xff0c;提供了豐富的功能和組件&#xff0c;其中幀動畫播放組件是游戲開發中常用的組件之一&#xff0c;通過幀動畫播放組件可以實現角色動畫、特效動畫等效果。本文將詳細介紹如何使用 Cocos Creator 制作幀動畫播放組件&#xff…

infoq學習筆記-云原生網關當道,三大主流廠商如何“競 技”?

注基礎組件的質量&#xff0c;這些基礎組件是用戶看不到的。這些組件包括代碼質量、自動化的CI/CD、端對端測試、混沌測試等。在APISIX中&#xff0c;我們內置了大 量的測試案例代碼&#xff0c;包括單元測試、E2E測試、混沌測試&#xff0c;以及一些基準測試等&#xff0c;從而…

沈陽師范大學文學院副教授傅贏

女&#xff0c;生于1971年6月&#xff0c;遼寧遼陽人&#xff0c;1995年6月畢業于沈陽師范學院中文系漢語言文學教育專業&#xff0c;2000年6月于東北師范大學獲中國現當代文學專業文學碩士學位&#xff0c;現為文學院漢語國際教育專業教師&#xff0c;副教授。 主要從事對外漢…

藍橋杯練習系統(算法訓練)ALGO-934 序列

資源限制 內存限制&#xff1a;256.0MB C/C時間限制&#xff1a;1.0s Java時間限制&#xff1a;3.0s Python時間限制&#xff1a;5.0s 問題描述 王神想要知道n的所有排列的逆序對數和&#xff0c;但是他覺得太水了&#xff0c;于是讓你算。 輸入格式 一行一個整數n 輸…

random和range

含義&#xff1a; random(1&#xff0c;10) 不包含10&#xff0c;用于生成隨機數。它可以生成浮點數或整數&#xff0c;取決于具體的使用方式。 range(0&#xff0c;1) 不包含1&#xff0c;用于生成一個整數序列。它可以生成一個指定范圍內的連續整數序列。 區別在于&#x…

Linux:Linux系統項目配置

linux高級 軟件安裝 rpm(redhat package manager)安裝 軟件已經按照redhat的包管理規范進行打包,使用rpm命令進行安裝,但包之間可能有依賴關系,因此不能自行解決庫依賴問題,比較麻煩 yum安裝 一種在線軟件安裝方式,本質上還是rpm安裝,自動下載安裝包并安裝,安裝過程中自動…

【MySQL精通之路】SQL優化(1)-查詢優化(23)-避免全表掃描

當MySQL使用全表掃描來解析查詢時&#xff0c;EXPLAIN的輸出在type列中顯示ALL。 這種情況通常發生在以下情況下&#xff1a; 該表非常小&#xff0c;因此執行全表掃描比查找關鍵字更快。這對于少于10行且行長較短的表來說很常見。 對于索引列&#xff0c;ON或WHERE子句中沒有…

服務器硬件全攻略:從入門到精通,全面解析服務器性能與穩定性!

服務器是計算機網絡中提供特定服務的計算機系統&#xff0c;其硬件配置和性能直接影響到整個網絡系統的運行效率和穩定性。作為一個資深的技術人員&#xff0c;本文將全面詳細地介紹服務器硬件基礎知識&#xff0c;包括介紹、命令或語法、主要作用以及使用方法等。 一、介紹 服…

Linux基礎(七):Linux 系統上的庫文件生成與使用

學過C語言我們知道&#xff0c;C語言有標準庫和自定義庫&#xff0c;這些方便了我們的實際開發&#xff0c;提供了已經實現好的函數接口&#xff0c;我們使用的時候&#xff0c;只需要引入頭文件即可&#xff0c;那具體的實現過程又是怎么樣的呢&#xff1f;我們又該如何實現我…

JS實現照片預覽

以下是一個簡單的JS代碼示例&#xff0c;用于實現照片預覽功能&#xff1a; <!DOCTYPE html> <html> <head><title>Photo Preview</title><script>function previewPhoto(event) {var reader new FileReader();reader.onload function(…

MySQL字符數據查詢拆分

MySQL字符數據查詢拆分 問題描述 數據表中某字段為特定單詞組字符串&#xff0c;特定字符分隔。 現有需求&#xff1a;在不影響原始數據的情況下&#xff0c;查詢顯示拆分后的單詞&#xff0c;方便后續對其進行后續操作。 演示 演示數據源 -- 測試表結構create table word_…

Java中創建不可變對象實現細節和例子

當我們在Java中創建不可變對象時&#xff0c;我們需要確保對象的狀態在創建之后不能被修改。以下是一些具體的實現細節和例子&#xff0c;展示了如何在Java中創建不可變對象。 實現細節 使用final關鍵字&#xff1a; 類定義前使用final關鍵字&#xff0c;表示該類不能被繼承&…

Mysql中的慢查詢

Mysql慢查詢的一些sql命令 慢查詢的默認事件為10秒 #注意&#xff1a;慢查詢一般是在調試階段開啟的&#xff0c;在開發階段中一般不會開啟&#xff0c;會對效率產生延誤 #查詢慢查詢是否開啟 show variables like %general%; #慢查詢時間設置 show variables like long_query…

【運維項目經歷|018】:Elasticsearch智能數據分析平臺項目

目錄 項目名稱 項目背景 項目目標 項目成果 我的角色與職責 我主要完成的工作內容 本次項目涉及的技術 本次項目遇到的問題與解決方法 本次項目中可能被面試官問到的問題 問題1&#xff1a;本次項目周期&#xff1f; 問題2&#xff1a;服務部署架構方式及數量和配置&…

【簡明指南:Python中的異常處理與穩健代碼設計】

文章目錄 前言異常處理基礎捕獲多種異常確保資源被釋放使用else子句自定義異常結論 前言 軟件開發過程中&#xff0c;保證代碼的穩健性和可靠性至關重要。異常處理是實現這一目標的關鍵技術之一。在Python編程中&#xff0c;合理地捕獲和處理異常不僅能提高程序的健壯性&#…

查找專利渠道

官方渠道 常規檢索 (cnipa.gov.cn)https://pss-system.cponline.cnipa.gov.cn/conventionalSearch 佰騰網 佰騰網 - 查專利就上佰騰網_佰騰全球專利搜索平臺_商標查詢平臺_企業工商信息查詢平臺 (baiten.cn)https://www.baiten.cn/

NLP(19)--大模型發展(3)

前言 僅記錄學習過程&#xff0c;有問題歡迎討論 大模型訓練相關知識&#xff1a; 問題&#xff1a; 數據集過大&#xff0c;快速訓練模型過大&#xff0c;gpu跑不完 方案&#xff1a; 數據并行訓練&#xff1a; 復制數據&#xff08;batch_size&#xff09;到多個gpu&…

簡述vue-router的動態路由

動態路由 addRoute 是 Vue Router 中的一個功能&#xff0c;它允許你在運行時動態地向路由表添加路由規則。這在一些需要基于用戶行為或異步數據加載路由的場景中非常有用。以下是對 addRoute 功能的詳細解釋和使用示例&#xff1a; 1. 動態路由的概念 動態路由是指在應用運行…

[雜項]優化AMD顯卡對DX9游戲(天諭)的支持

目錄 關鍵詞平臺說明背景RDNA 1、2、3 架構的顯卡支持游戲一、 優化方法1.1 下載 二、 舉個栗子&#xff08;以《天諭》為例&#xff09;2.1 下載微星 afterburner 軟件 查看游戲內信息&#xff08;可跳過&#xff09;2.2 查看D3D9 幀數2.3 關閉游戲&#xff0c;替換 dll 文件2…

精品PPT | MES設計與實踐,業務+架構+實施(免費下載))

【1】關注本公眾號&#xff0c;轉發當前文章到微信朋友圈 【2】私信發送 MES設計與實踐 【3】獲取本方案PDF下載鏈接&#xff0c;直接下載即可。 如需下載本方案PPT/WORD原格式&#xff0c;請加入微信掃描以下方案驛站知識星球&#xff0c;獲取上萬份PPT/WORD解決方案&#x…