WPF事件处理器+x名称空间

news2025/6/2 8:36:09

目录

​编辑

一、事件处理器知识点

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.coloradmin.cn/o/2393382.html

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

相关文章

具身智能:OpenAI 的真正野心与未来展望

提到 ChatGPT&#xff0c;你对它的第一印象是什么&#xff1f;是担心它会威胁到工程师的工作&#xff0c;还是觉得它只是个会说空话的工具&#xff1f;或许你正在学习一些简单的教程&#xff0c;试图用它来建立知识库&#xff0c;自动化日常工作&#xff0c;觉得它不过如此&…

Lyra学习笔记2 GFA_AddComponents与ULyraPlayerSpawningManagerComponent

目录 前言GameFeatureAction_AddComponentsULyraPlayerSpawningManagerComponent缓存所有PlayerStart位置选择位置 前言 1.以control模式为例 2.比较散&#xff0c;想单独拿出一篇梳理下Experience的流程 GameFeatureAction_AddComponents 这部分建议看 《InsideUE5》GameFeatu…

个人健康中枢的多元化AI软件革新与精准健康路径探析

引言 人工智能技术的迅猛发展正在重塑医疗健康领域的服务模式和用户体验。随着多模态大模型、MCP协议、A2A协议和思考链算法等创新技术的出现,个人健康中枢正在经历一场深刻的软件革新。这些技术不仅打破了传统健康管理系统的信息孤岛,还通过多维度数据整合和深度推理能力,…

Matlab实现LSTM-SVM时间序列预测,作者:机器学习之心

Matlab实现LSTM-SVM时间序列预测&#xff0c;作者&#xff1a;机器学习之心 目录 Matlab实现LSTM-SVM时间序列预测&#xff0c;作者&#xff1a;机器学习之心效果一览基本介绍程序设计参考资料 效果一览 基本介绍 该代码实现了一个结合LSTM和SVM的混合模型&#xff0c;用于时间…

JAVA 集合的进阶 泛型的继承和通配符

1 泛型通配符 可以对传递的类型进行限定 1.1 格式 ? 表示不确定的类型 &#xff1f;extends E&#xff1a; 表示可以传递 E 或者 E 所有的子类类型 &#xff1f;super E&#xff1a; 表示可以传递 E 或者 E 所有的父类类…

下一代液晶显示底层技术与九天画芯的技术突围

一、液晶产业&#xff1a;撑起数字经济的显示脊梁 &#xff08;一&#xff09;全球显示市场的核心支柱 作为电子信息产业的战略基石&#xff0c;液晶显示&#xff08;LCD&#xff09;占据全球平板显示市场超 60% 的份额&#xff0c;2022 年全球市场规模达 782.41 亿元&#xf…

[NOIP 2001 普及组] 求先序排列 Java

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String infixOrder sc.nextLine(); // 中序String postOrder sc.nextLine(); // 后序sc.close();System.out.println(preOrder(infixOrder, postOrder))…

Rockey Linux 安装ffmpeg

1.环境准备 Rockey linux 9.2 ffmpeg 静态资源包 这个是我自己的&#xff1a; https://download.csdn.net/download/liudongyang123/90920340https://download.csdn.net/download/liudongyang123/90920340 这个是官网的 Releases BtbN/FFmpeg-Builds GitHub 以上两个资…

STM32 Modbus RTU从机开发实战:核心实现与五大调试陷阱解析

知识点1【CRC校验】 CRC校验生成网址 CRC&#xff08;循环冗余校验&#xff09;在线计算_ip33.com 知识点2【代码演示】 代码书写思路 代码演示 main.c #include "stm32f10x.h" #include "stm32f10x_conf.h" #include "rs485.h"int main(voi…

Python----目标检测(《Fast R-CNN》和Fast R-CNN)

一、《Fast R-CNN》 1.1、基本信息 作者&#xff1a;Ross Girshick 机构&#xff1a;Microsoft Research 发表时间&#xff1a;2015年 论文链接&#xff1a;arXiv:1504.08083 代码开源&#xff1a;GitHub仓库&#xff08;MIT License&#xff09; 1.2、主要内容 Fast R…

iEKF的二维应用实例

如果熟悉 EKF 与卡尔曼的推导的话&#xff0c;iEKF 就比较容易理解&#xff0c;关于卡尔曼滤波的推导以及EKF&#xff0c;可以参考以前的文章&#xff1a; 卡尔曼滤波原理&#xff1a;https://blog.csdn.net/a_xiaoning/article/details/130564473?spm1001.2014.3001.5502 E…

【通关文件操作(下)】--文件的顺序读写(续),sprintf和sscanf函数,文件的随机读写,文件缓冲区,更新文件

目录 四.文件的顺序读写(续) 4.8--fwrite函数 4.9--fread函数 五.sprintf函数和sscanf函数 5.1--函数对比 5.2--sprintf函数 5.3--sscanf函数 六.文件的随机读写 6.1--fseek函数 6.2--ftell函数 6.3--rewind函数 七.文件缓冲区 7.1--fflush函数 八.更新文件 &…

mysql的Memory引擎的深入了解

目录 1、Memory引擎介绍 2、Memory内存结构 3、内存表的锁 4、持久化 5、优缺点 6、应用 前言 Memory 存储引擎 是 MySQL 中一种高性能但非持久化的存储方案&#xff0c;适合临时数据存储和缓存场景。其核心优势在于极快的读写速度&#xff0c;需注意数据丢失风险和内存占…

【数据结构】——二叉树堆(下)

一、堆中两个重要的算法 我们前面学习了树的概念和结构&#xff0c;还要树的一种特殊树--二叉树&#xff0c;然后我们学习了堆&#xff0c;知道了堆分为大堆和小堆&#xff0c;接下来我们就使用堆来进行一个排序。 在学习我们的堆排序前&#xff0c;我们先详细学习一下我们堆…

t009-线上代驾管理系统

项目演示地址 摘 要 使用旧方法对线上代驾管理系统的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在线上代驾管理系统的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题…

目标检测预测框置信度(Confidence Score)计算方式

预测框的置信度&#xff08;Confidence Score&#xff09;是目标检测模型输出的一个关键部分&#xff0c;它衡量了模型对一个预测框中包含特定类别对象的确定程度。 不同的目标检测模型&#xff08;如Faster R-CNN、SSD、YOLO、DETR等&#xff09;在计算置信度时有其特有的机制…

【题解-洛谷】B4295 [蓝桥杯青少年组国赛 2022] 报数游戏

题目&#xff1a;B4295 [蓝桥杯青少年组国赛 2022] 报数游戏 题目描述 某班级男生人数为 X X X 人&#xff0c;女生人数为 Y Y Y 人&#xff0c;现全班同学围成一个圆圈&#xff0c;并按照顺时针方向为每名同学编号&#xff08;从 1 1 1 到 X Y XY XY&#xff09;。现给…

Bootstrap项目 - 个人作品与成就展示网站

文章目录 前言一、项目整体概述1. 项目功能介绍1.1 导航栏1.2 首页模块1.3 关于我模块1.4 技能模块1.5 作品模块1.6 成就模块1.7 博客模块1.8 联系我模块 2. 技术选型说明 二、项目成果展示1. PC端展示1.1 首页1.2 关于我1.3 技能1.4 作品1.5 成就1.6 博客1.7 联系我 2. 移动端…

新能源汽车霍尔线束介绍

新能源汽车作为传统燃油车的重要替代方案&#xff0c;其核心驱动系统依赖于高效、精准的电子控制技术。在这一体系中&#xff0c;霍尔线束作为关键传感器组件&#xff0c;承担着电机转速、位置信号的实时采集与传输任务&#xff0c;其性能直接影响整车动力输出的稳定性和能量利…

气镇阀是什么?

01、阀门介绍&#xff1a; 油封机械真空泵的压缩室上开一小孔&#xff0c;并装上调节阀&#xff0c;当打开阀并调节入气量&#xff0c;转子转到某一位置&#xff0c;空气就通过此孔掺入压缩室以降低压缩比&#xff0c;从而使大部分蒸汽不致凝结而和掺入的气体一起被排除泵外起此…