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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…