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字段不能被外部访问!
相关推荐
Vae_Mars17 小时前
WPF中的图标闪烁功能
stm32·单片机·wpf
unicrom_深圳市由你创科技17 小时前
C#与 Prism 框架:构建模块化的 WPF 应用程序
开发语言·c#·wpf
军训猫猫头1 天前
95.WPF中图片控件的使用与资源路径设置 WPF例子 C#例子
ui·c#·.net·wpf
qq_340474021 天前
5 WPF中的Page页面的使用
开发语言·c#·wpf
keke101 天前
WPF【11_3】WPF实战-重构与美化(可复用的UI组件)
ui·重构·wpf
TwilightLemon1 天前
WPF 使用GDI+提取图片主色调并生成Mica材质特效背景
wpf
keke102 天前
WPF【11_4】WPF实战-重构与美化(MVVM 架构)
重构·架构·wpf
keke102 天前
WPF【11_5】WPF实战-重构与美化(MVVM 实战)
重构·c#·wpf
keke102 天前
WPF【11_7】WPF实战-重构与美化(ViewModel的嵌套与分解、海量数据不要Join)
重构·wpf