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

目录

​编辑

一、事件处理器知识点

[1. XAML中的事件绑定](#1. XAML中的事件绑定)

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

[3. 方法签名解释](#3. 方法签名解释)

[4. 命名规范](#4. 命名规范)

工作流程

二、导入引用名称空间

三、x名称空间及其常用元素

(1)x名称空间的由来和作用

(2)x名称空间里都有些什么

[1. Attribute(属性)](#1. Attribute(属性))

[2. 标签扩展](#2. 标签扩展)

[3. XAML指令元素](#3. XAML指令元素)

使用特点

(3)x:ClassModifier

(4)x:Name

使用场景区别

[x:Name 的两个作用](#x:Name 的两个作用)

"如果对象有Name属性,会自动设置为相同的值"是什么意思

为什么要设置Name属性?

(4)x:FieldModifier

作用:控制XAML中控件生成的C#字段的访问级别

访问级别冲突


XAML是声明性语言,每见到一个标签声明一个实例。

每个XAML标签 = 创建一个对象

举例说明

XAML代码(声明性):

XML 复制代码
<Grid>
    <Button Content="点击我"/>
    <TextBox Text="输入框"/>
</Grid>

等价的C#代码(命令性):

cs 复制代码
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中的事件绑定

XML 复制代码
<Button Click="button1_Click"/>
  • Click 是事件名
  • button1_Click 是对应的C#方法名
  • 这样就把按钮点击和后台方法关联起来了

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

cs 复制代码
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. 声明引用变量

XML 复制代码
<Button x:Name="myButton"/>
  • 在C#代码中可以直接用 myButton 访问这个按钮
  • 变量名就是x:Name的值

2. 设置Name属性

  • 如果对象有Name属性,会自动设置为相同的值
  • 相当于 Name="myButton"

"如果对象有Name属性,会自动设置为相同的值"是什么意思

XAML代码:

XML 复制代码
<Button x:Name="saveButton" Content="保存"/>

WPF自动做了两件事:

1. 创建C#变量(这个总是会做的)

cs 复制代码
Button saveButton; // 让你在C#代码中可以用saveButton访问

2. 设置Name属性(只有控件有Name属性才会做)

cs 复制代码
saveButton.Name = "saveButton"; // 把控件本身的Name属性也设置了

在C#代码中测试:

cs 复制代码
private void TestButton()
{
    // 第1个作用:可以通过变量访问
    saveButton.Content = "新内容";
    
    // 第2个作用:Name属性也被设置了
    MessageBox.Show(saveButton.Name); // 显示 "saveButton"
}
  • 变量名Name属性值同一个字符串
  • x:Name="abc" → 变量名是abc,控件的Name属性也是"abc"

为什么要设置Name属性?

有些WPF功能需要通过Name属性查找控件:

cs 复制代码
// 通过Name属性查找控件
Button found = (Button)this.FindName("saveButton");

简单说:x:Name既创建了变量,又给控件起了内部名字。


(4)x:FieldModifier

作用:控制XAML中控件生成的C#字段的访问级别

XAML代码:

XML 复制代码
<TextBox x:FieldModifier="private" x:Name="textBox1" .../>

C#代码:

cs 复制代码
WindowHappy wh = new WindowHappy();
wh.textBox1.Text = "I'm happy!";  // 这行代码有问题!
wh.ShowDialog();
访问级别冲突
  • x:FieldModifier="private" 生成私有字段
  • 但C#代码试图从外部 访问 wh.textBox1
  • private字段不能被外部访问!
相关推荐
玖笙&4 天前
✨WPF编程基础【2.1】布局原则
c++·wpf·visual studio
玖笙&4 天前
✨WPF编程基础【2.2】:布局面板实战
c++·wpf·visual studio
SEO-狼术4 天前
.NET WPF 数据编辑器集合提供列表框控件
.net·wpf
FuckPatience8 天前
WPF 具有跨线程功能的UI元素
wpf
诗仙&李白8 天前
HEFrame.WpfUI :一个现代化的 开源 WPF UI库
ui·开源·wpf
He BianGu8 天前
【笔记】在WPF中Binding里的详细功能介绍
笔记·wpf
He BianGu8 天前
【笔记】在WPF中 BulletDecorator 的功能、使用方式并对比 HeaderedContentControl 与常见 Panel 布局的区别
笔记·wpf
123梦野9 天前
WPF——效果和可视化对象
wpf
He BianGu9 天前
【笔记】在WPF中Decorator是什么以及何时优先考虑 Decorator 派生类
笔记·wpf
时光追逐者9 天前
一款专门为 WPF 打造的开源 Office 风格用户界面控件库
ui·开源·c#·.net·wpf