当前位置: 首页 > news >正文

WPF学习(8)- Button按钮

1. 用法解析

Button因为继承了ButtonBase,而ButtonBase又继承了ContentControl,所以,Button可以通过设置Content属性来设置要显示的内容。例如

<Button Content="确定"/>

我们使用Button的时机,通常是鼠标点击事件需要有响应操作时,所以,Button的Click事件是最好的选择。

public class Button : ButtonBase
{public static readonly DependencyProperty IsDefaultProperty;public static readonly DependencyProperty IsCancelProperty;public static readonly DependencyProperty IsDefaultedProperty;public Button();public bool IsDefault { get; set; }public bool IsCancel { get; set; }public bool IsDefaulted { get; }protected override void OnClick();protected override AutomationPeer OnCreateAutomationPeer();}
  • IsDefault:用户通过按 ENTER 键时调用的默认按钮。
  • IsCancel:用户可以通过按 ESC 键来激活取消按钮。
  • IsDefaulted:获取按钮是否为按 ENTER 键时调用的默认按钮。

2. 案例

前端代码

    <Button x:Name="_button" Content="退出" Width="100" Height="25" Click="_button_Click" IsDefault="True"/>

后端代码

    public partial class MainWindow{public MainWindow(){InitializeComponent();}private void _button_Click(object sender, RoutedEventArgs e){this.Close();}}

在这里插入图片描述

3. 属性解析

x:Name和Name的区别

第一个设置是x:Name="_button"。首先要解释x:Name是什么意思。在这里的x表示一个命令空间,也就是xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml",Name指的是这个控件的名称。请注意,由于Button继承了FrameworkElement类,而FrameworkElement类也有一个Name属性,但是这里设置的x:Name="_button"并不是引用了FrameworkElement类的Name属性,而是指在xaml中为Button定义了一个叫“_button"的名称,并把这个“_button"映射到了Button的Name属性上,以便于我们在后端可以通过”_button“去引用这个按钮。

也就是说,如果某个控件本身也有一个Name属性,那么前端的x:Name就赋值给控件Name属性。

Content属性

用来设置Button的显示内容,除了是字符串,也可以设置为其它内容,比如一个图标、一个其它元素。

Width属性

Width也不是Button本身的属性,而是FrameworkElement的宽度,由于Button继承了FrameworkElement,所以Width就成了按钮的宽度属性。

Height属性

与上面的Width类似,同属于FrameworkElement的高度属性,在此成了Button的高度属性。

Click事件

Click是一个事件,但不是Button的事件,而是它的基类ButtonBase的事件,事件和委托概念关系密切,因为要订阅一个事件,需要写一个回调函数,而这个回调函数的签名要和这个事件的声明委托签名保持一致。

IsDefault属性

这个属性是Button自身的属性,这里设置为true,表示这个button是一个默认按钮。
this.Close()表示关闭当前窗体。

通过C#代码订阅事件

还可以通过C#代码提供的事件订阅符号+=去订阅事件,将上面的例子修改一下,去掉在xaml中的订阅方式,在后端代码的构造函数中订阅事件。

前端代码

<Button Name="_button" Content="退出" Width="100" Height="25" IsDefault="True"/>

后端代码

 /// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();_button.Click += _button_Click;}private void _button_Click(object sender, RoutedEventArgs e){this.Close();}}
http://www.lryc.cn/news/417009.html

相关文章:

  • Flutter GPU 是什么?为什么它对 Flutter 有跨时代的意义?
  • 第6章>>实验7:PS(ARM)端Linux RT与PL端FPGA之间(通过Memory存储器进行通信和交互)《LabVIEW ZYNQ FPGA宝典》
  • 通用前端的学习
  • git本地仓库关联多个远程仓库时git pull失败问题
  • 人工智能(AI)、Web 3.0和元宇宙三者联系、应用及未来发展趋势的详细分析
  • 【IEEE出版 | 高校主办】第三届人工智能、物联网和云计算技术国际会议(AIoTC 2024)
  • PTA 7-4 BCD解密
  • 计算机网络中拥塞控制的门限值怎么设置
  • 解锁肥胖焦虑的枷锁:拥抱自我,健康前行
  • WPF学习(7)- Control基类+ContentControl类(内容控件)+ButtonBase基类
  • moka实习生一面0607
  • centos开启samba服务
  • 2024年8月一区SCI-海市蜃楼优化算法Fata morgana algorithm-附Matlab免费代码
  • 【编程笔记】解决移动硬盘无法访问文件或目录损坏且无法读取
  • 行为型模式(一)策略模式
  • JAVA中的Wrapper类
  • 在没有硬盘的情况下进行电脑数据迁移
  • C++转Java基础知识
  • 搭建jenkins一键部署java项目
  • 从零到一打造自己的大模型(一)模型实现
  • 【开源项目】基于RTP协议的H264码流发送器和接收器
  • 【C++】4.类和对象(2)
  • 搭建基于树莓派的Linux学习环境(TODO)
  • 《大电机技术》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • Python 中使用 Split 忽略逗号
  • YOLOv10改进 | 主干篇 | YOLOv10引入CVPR2023 顶会论文BiFormer用于主干修改
  • sql注入靶场搭建
  • 【MySQL】MySQL的JSON特性
  • 微信小程序 - 自定义计数器 - 优化(键盘输入校验)
  • Nacos 容器化安装和代理配置指南