WPF事件處理器+x名稱空間

目錄

?編輯

一、事件處理器知識點

1. XAML中的事件綁定

2. C#中的事件處理方法

3. 方法簽名解釋

4. 命名規范

工作流程

二、導入引用名稱空間

三、x名稱空間及其常用元素

(1)x名稱空間的由來和作用

(2)x名稱空間里都有些什么

1. Attribute(屬性)

2. 標簽擴展

3. XAML指令元素

使用特點

(3)x:ClassModifier

(4)x:Name

使用場景區別

x:Name 的兩個作用

“如果對象有Name屬性,會自動設置為相同的值”是什么意思

為什么要設置Name屬性?

(4)x:FieldModifier

作用:控制XAML中控件生成的C#字段的訪問級別

訪問級別沖突


XAML是聲明性語言,每見到一個標簽聲明一個實例。

每個XAML標簽 = 創建一個對象

舉例說明

XAML代碼(聲明性):

<Grid><Button Content="點擊我"/><TextBox Text="輸入框"/>
</Grid>

等價的C#代碼(命令性):

Grid grid = new Grid();           // <Grid> 創建Grid實例
Button button = new Button();     // <Button> 創建Button實例  
button.Content = "點擊我";
TextBox textBox = new TextBox();  // <TextBox> 創建TextBox實例
textBox.Text = "輸入框";grid.Children.Add(button);
grid.Children.Add(textBox);

一、事件處理器知識點

1. XAML中的事件綁定

<Button Click="button1_Click"/>
  • Click 是事件名
  • button1_Click 是對應的C#方法名
  • 這樣就把按鈕點擊和后臺方法關聯起來了

2. C#中的事件處理方法

private void button1_Click(object sender, RoutedEventArgs e)
{MessageBox.Show("Hello WPF!");
}

3. 方法簽名解釋

  • object sender: 觸發事件的控件(這里是那個Button)
  • RoutedEventArgs e: 事件相關信息
  • 返回類型必須是 void

4. 命名規范

  • 通常用:控件名_事件名,比如button1_Click

工作流程

  1. 用戶點擊按鈕
  2. WPF查找 button1_Click 方法
  3. 執行方法內的代碼
  4. 顯示消息框

二、導入引用名稱空間

三、x名稱空間及其常用元素

(1)x名稱空間的由來和作用

  • xmlns:x是XAML的標準名稱空間聲明
  • x約定俗成的前綴名,代表XAML本身的功能
  • 這個URL http://schemas.microsoft.com/winfx/2006/xaml 是微軟定義的XAML規范地址

(2)x名稱空間里都有些什么

x名稱空間里的內容分為三大類

1. Attribute(屬性)

最常用的一類,直接作為屬性使用:

  • x:Name - 給控件命名,方便代碼訪問
  • x:Key - 資源的唯一標識符
  • x:FieldModifier - 控制字段訪問級別
  • x:Shared - 控制資源是否共享
  • x:Subclass - 指定子類
  • x:TypeArguments - 泛型類型參數
  • x:Uid - 本地化標識符

2. 標簽擴展

需要用花括號 {} 語法:

  • x:Null - 表示空值 {x:Null}
  • x:Static - 訪問靜態成員 {x:Static local:MyClass.StaticProperty}
  • x:Type - 獲取類型信息 {x:Type Button}

3. XAML指令元素

作為XML元素使用:

  • x:Code - 內嵌代碼塊
  • x:XData - 包裝原始數據

使用特點

  • Attribute: 直接寫在標簽上 <Button x:Name="btn1"/>
  • 標簽擴展: 用花括號 Value="{x:Static SystemColors.ControlBrush}"
  • 指令元素: 作為子元素 <x:Code>...</x:Code>

(3)x:ClassModifier

class modify在編程中是指類修飾符,它主要用于控制類的訪問級別。當類的class modifier設為public時,意味著該類可以從程序集外部訪問;若設為private,則表示該類只能在當前程序集中被訪問,外部無法直接訪問。


(4)x:Name

使用場景區別

1. WPF控件(派生自FrameworkElement)

  • x:Name="btn1"Name="btn1" 效果相同
  • 一般WPF控件都可以用兩種方式

2. 非WPF控件(不派生自FrameworkElement)

  • 只能用 x:Name="xxx"
  • 不能用 Name 屬性

x:Name 的兩個作用

1. 聲明引用變量

<Button x:Name="myButton"/>
  • 在C#代碼中可以直接用 myButton 訪問這個按鈕
  • 變量名就是x:Name的值

2. 設置Name屬性

  • 如果對象有Name屬性,會自動設置為相同的值
  • 相當于 Name="myButton"

“如果對象有Name屬性,會自動設置為相同的值”是什么意思

XAML代碼:

<Button x:Name="saveButton" Content="保存"/>

WPF自動做了兩件事:

1. 創建C#變量(這個總是會做的)

Button saveButton; // 讓你在C#代碼中可以用saveButton訪問

2. 設置Name屬性(只有控件有Name屬性才會做)

saveButton.Name = "saveButton"; // 把控件本身的Name屬性也設置了

在C#代碼中測試:

private void TestButton()
{// 第1個作用:可以通過變量訪問saveButton.Content = "新內容";// 第2個作用:Name屬性也被設置了MessageBox.Show(saveButton.Name); // 顯示 "saveButton"
}
  • 變量名Name屬性值同一個字符串
  • x:Name="abc" → 變量名是abc,控件的Name屬性也是"abc"

為什么要設置Name屬性?

有些WPF功能需要通過Name屬性查找控件:

// 通過Name屬性查找控件
Button found = (Button)this.FindName("saveButton");

簡單說:x:Name既創建了變量,又給控件起了內部名字。


(4)x:FieldModifier

作用:控制XAML中控件生成的C#字段的訪問級別

XAML代碼:

<TextBox x:FieldModifier="private" x:Name="textBox1" .../>

C#代碼:

WindowHappy wh = new WindowHappy();
wh.textBox1.Text = "I'm happy!";  // 這行代碼有問題!
wh.ShowDialog();
訪問級別沖突
  • x:FieldModifier="private" 生成私有字段
  • 但C#代碼試圖從外部訪問 wh.textBox1
  • private字段不能被外部訪問!

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

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

相關文章

Axure設計案例——科技感漸變線性圖

想讓數據變化趨勢展示告別枯燥乏味&#xff0c;成為吸引觀眾目光的亮點嗎&#xff1f;快來看看這個Axure設計的科技感漸變線性圖案例&#xff01;科技感設計風格憑借炫酷的漸變色彩打破傳統線性圖的單調&#xff0c;營造出一種令人過目難忘的視覺體驗。每一條線條都仿佛是流動的…

Git全流程操作指南

Git全流程操作指南 一、Git 環境配置 1. 安裝 Git Windows&#xff1a;下載 Git for Windows macOS&#xff1a;brew install git Linux&#xff1a; sudo apt-get update && sudo apt-get install git # Debian/Ubuntu sudo yum install git …

AI與軟件工程結合的未來三年發展路徑分析

基于對數字化、制造業、工業、零售業等行業的系統調研&#xff0c;以及微軟、谷歌、阿里、華為等大廠的實踐案例&#xff0c;我們可以預見未來三年AI與軟件工程結合將呈現以下發展路徑和趨勢。 一、技術應用維度 1. AI輔助編程工具全面普及 未來三年&#xff0c;AI輔助編程工…

tiktoken學習

1.tiktoken是OpenAI編寫的進行高效分詞操作的庫文件。 2.操作過程&#xff1a; enc tiktoken.get_encoding("gpt2") train_ids enc.encode_ordinary(train_data) val_ids enc.encode_ordinary(val_data) 以這段代碼為例&#xff0c;get_encoding是創建了一個En…

DeepSeek 賦能文化遺產數字化修復:AI 重構千年文明密碼

目錄 一、引言二、文化遺產數字化修復概述2.1 文化遺產數字化修復的意義2.2 傳統數字化修復方法與局限 三、DeepSeek 技術剖析3.1 DeepSeek 技術原理與核心優勢3.2 相比其他技術的獨特之處 四、DeepSeek 在文化遺產數字化修復中的應用4.1 破損文物的智能修復4.2 文化遺產的虛擬…

leetcode題解513:找樹左下角的值(遞歸中的回溯處理)!

一、題目內容&#xff1a; 題目要求找到一個二叉樹的最底層最左邊節點的值。具體來說&#xff0c;我們需要從根節點開始遍歷二叉 樹&#xff0c;找到最深的那層中的最左邊的節點&#xff0c;并返回該節點的值。因為要先找到最底層左側的值&#xff0c;所以我們選擇遍歷順序一定…

C#面試問題41-60

41. What is the Singleton design pattern? Singleton is a class that only allows creating a single instance of itselt. 單例設計模式是一個類&#xff0c;它只允許創建自己的單個實例。 構造函數防止他在單例類以外的地方被調用。 使用情景&#xff1a;need a sing…

筆記思考法

掌握麥肯錫流筆記術&#xff0c;對大家來說有以下幾種好處: 1) 可以將自己的思考可視化&#xff0c;使之變得更加清晰 2) 避免無用功 3) 經常能夠提出有創意的想法 4) 遇到問題時能夠及時找到解決辦法 5) 不管面對什么情況都能夠找出真正有效的解決辦法 為什么僅僅通過改變使用…

Rust 學習筆記:關于閉包的練習題

Rust 學習筆記&#xff1a;關于閉包的練習題 Rust 學習筆記&#xff1a;關于閉包的練習題問題 1問題 2以下程序能否通過編譯&#xff1f;若能&#xff0c;輸出是&#xff1f;以下程序能否通過編譯&#xff1f;若能&#xff0c;輸出是&#xff1f;考慮該 API&#xff0c;空白處填…

(一)微服務(垂直AP/分布式緩存/裝飾器Pattern)

文章目錄 項目地址一、創建第一個垂直API1.1 創建Common層1. ICommand接口2. IQuery接口 1.2 創建API1. 實體2. Handler3. endpoint 1.3 使用Marten作為ORM 二、Redis緩存2.1 使用緩存裝飾器1. 創建裝飾器2. 注冊裝飾器 2.2 創建docker-compose1. docker-compose2. docker-comp…

Spring AI系列之使用 Spring AI 轉錄音頻文件(基于OpenAI)

概述 企業常常需要從各種類型的音頻內容中提取有價值的數據&#xff0c;例如&#xff1a;將客戶支持通話轉錄用于情感分析、為視頻生成字幕&#xff0c;或整理會議紀要。然而&#xff0c;手動轉錄音頻文件既耗時又昂貴。 為了解決這一問題&#xff0c;OpenAI 提供了強大的語…

室內VR全景助力房產營銷及裝修

在當今的地產行業&#xff0c;VR全景已成為不可或缺的應用工具。從地產直播到樓市VR地圖&#xff0c;從效果圖到水電家裝施工記錄&#xff0c;整個地產行業的上下游生態中&#xff0c;云VR全景的身影無處不在。本文將探討VR全景在房產營銷及裝修領域的應用&#xff0c;并介紹眾…

Sentinel限流熔斷機制實戰

1、核心概念 1.1、流量控制 流量控制是為了 防止系統被過多的請求壓垮&#xff0c;確保資源合理分配并保持服務的可用性&#xff0c;比如對請求數量的限制。 流量控制的 3 個主要優勢&#xff1a; 防止過載&#xff1a;當瞬間涌入的請求量超出系統處理能力時&#xff0c;會…

深度解析 torch.mean 的替代方案

torch.mean 是什么意思 代碼效果解釋 segment_vector = torch.mean(segment_embedding, dim=1) # [1, hidden_dim] 這行代碼的作用是在指定維度上對張量 segment_embedding 求平均值,實現類似平均池化的效果。 具體來說,dim=1 表示沿著索引為1的維度進行操作。假設 segment…

Paraformer語音模型:一種語音模型加速方法

隨著智能語音技術的普及&#xff0c;語音識別&#xff08;ASR&#xff09;、語音合成&#xff08;TTS&#xff09;、聲紋識別等應用場景對模型推理效率提出了極高要求&#xff0c;本文介紹將Paraformer語音模型從預訓練模型導出為ONNX格式&#xff0c;并使用ONNX Runtime進行推…

本地部署FreeGPT+內網穿透公網遠程訪問,搞定ChatGPT外網訪問難題

?FreeGPT?是一個基于GPT 3.5/4的ChatGPT聊天網頁用戶界面&#xff0c;提供了一個開放的聊天界面&#xff0c;開箱即用?。ChatGPT是非常熱門的&#xff0c;但訪問體驗一直不太理想。為了解決這一問題&#xff0c;出現了各類方法和工具&#xff0c;其中FreeGPT是一款非常實用的…

ElasticSearch遷移至openGauss

Elasticsearch 作為一種高效的全文搜索引擎&#xff0c;廣泛應用于實時搜索、日志分析等場景。而 openGauss&#xff0c;作為一款企業級關系型數據庫&#xff0c;強調事務處理與數據一致性。那么&#xff0c;當這兩者的應用場景和技術架構發生交集時&#xff0c;如何實現它們之…

品優購項目(HTML\CSS)

項目效果可訪問 http://zhousunyu.3vdo.club 查看 主頁 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><titl…

因泰立科技:鐳眸T51激光雷達,打造智能門控新生態

在高端門控行業&#xff0c;安全與效率是永恒的追求。如今&#xff0c;隨著科技的飛速發展&#xff0c;激光雷達與TOF相機技術的融合&#xff0c;為門控系統帶來了前所未有的智能感知能力&#xff0c;開啟了精準守護的新時代。因泰立科技的鐳眸T51激光雷達&#xff0c;作為這一…

MyBatisPlus--快速入門

MyBatisPlus介紹 從名字中就可以感覺到MybatisPlus與MyBatis之間的淵源&#xff0c;而MyBatis是一個非常流行的持久層框架&#xff0c;主要來做數據庫的增刪改查&#xff0c;而MyBatisPlus這種命名方式讓人不得不往MyBatis的升級版去聯想&#xff0c;事實也確實如此&#xff0…