WPF学习(7)- Control基类+ContentControl类(内容控件)+ButtonBase基类

news2024/9/24 19:20:07

前面给大家介绍完了WPF所有的布局控件,属性以及使用案例,从这里咱们就开始学下内容控件。

Control基类

Control是许多控件的基类。比如最常见的按钮(Button)、单选(RadioButton)、复选(CheckBox)、文本框(TextBox)、ListBox、DataGrid、日期控件等等。这些控件通常用于展示程序的数据或获取用户输入的数据,这一类型的控件称为内容控件或数据控件。

它们与前面的布局控件有一定的区别,布局控件更专注于界面,而内容控件更专注于数据(业务)。

1. 属性

Control类虽然可以实例化,但是在界面上是不会有任何显示的。只有那些继承了Control的子类(控件)才会在界面上显示,而且所呈现的样子各不相同,因为Control类提供了一个控件模板(ControlTemplate),而几乎所有的子类都对这个ControlTemplate进行了各自的实现,所以在呈现子类时,我们才会看到Button拥有Button的样子,TextBox拥有TextBox的样子。

  • FontStyle:获取或设置控件的字体结构,类似于Word中字体的常规、斜体或倾斜
  • FontStretch:获取或设置紧缩或在屏幕上展开一种字体的程度。
  • FontSize:获取或设置字体大小。
  • FontFamily:获取或设置控件的字体系列。如:微软雅黑 = “Microsoft YaHei UI”
  • Foreground:获取或设置控件的字体颜色,也就是所谓的前景色画笔,它是一个刷子(Brush)
  • Background:获取或设置一个用于描述控件的背景画笔。
  • BorderThickness:获取或设置控件的边框宽度。
  • IsTabStop:获取或设置一个值,该值指示控件是否包括在选项卡上的导航窗格中。
  • VerticalContentAlignment:获取或设置控件的内容的垂直对齐方式。
  • TabIndex:获取或设置一个值,确定当用户导航控件通过使用 TAB 键元素接收焦点的顺序。
  • Padding: 获取或设置在控件中的填充量。
  • Template:获取或设置控件模板。
  • FontWeight:获取或设置指定的字体粗细。
  • BorderBrush:获取或设置一个用于描述一个控件的边框背景画笔。
  • HorizontalContentAlignment:获取或设置控件的内容的水平对齐方式。

2. 事件

Control类还提供了两个事件,它们分别是PreviewMouseDoubleClick和MouseDoubleClick。

  • PreviewMouseDoubleClick:表示鼠标双击或多次单击时触发的事件。
  • MouseDoubleClick:表示鼠标双击或多次单击时触发的事件。

以Preview开头的事件叫隧道事件或预览事件,而MouseDoubleClick没有以Preview开头,所以它叫冒泡事件。

  • WPF的前端代码其实是一棵树,当我们在某个目标控件上进行鼠标操作时,所引发的事件有两个方向,一是从Winow根节点一直路由到目标控件上,看起来就好像是从外面一直沿着这棵树路由引发至里面,这就像我们开车进入隧道一样,所以Preview开头的事件叫隧道事件。

  • 冒泡事件事件的路由方向相反,是从目标控件位置开始,一直路由引发至最外层的Window窗体。

关于路由事件,后面我们会细聊。

ContentControl类(内容控件)

它有一个Content属性,这个属性的类型是object。本质上,它可以接收任意引用类型的实例。
但是通常情况下,Content属性接收UI控件。因为ContentControl控件最终会把Content属性里面的内容显示到界面上。

如果我们将非要把其它类型的对象(比如字符串)强行塞给Content属性,如下:

    <ContentControl Foreground="Red" FontSize="36" HorizontalAlignment="Center" VerticalAlignment="Center">
        我爱学习WPF
    </ContentControl>

在这里插入图片描述
最后我们发现,也能够正常显示。

ContentTemplate属性(内容模板)

这个属性表示获取或设置用来显示的内容的数据模板,如果没有设置数据模板,它将以默认的数据模板来显示这几个字。我们看下这个属性的用法,并简要说明其中的关系。

    <ContentControl Foreground="Red" FontSize="36" HorizontalAlignment="Center" VerticalAlignment="Center">
        <ContentControl.ContentTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding}" Foreground="Green" FontSize="16"/>
            </DataTemplate>
        </ContentControl.ContentTemplate>
        我爱WPF
    </ContentControl>

在这里插入图片描述
ContentControl类的ContentTemplate属性是DataTemplate类型,所以我们在xaml中实例化了一个DataTemplate(数据模板)对象,并在其中增加了一个TextBlock控件,将TextBlock控件的Text属性写成了Binding形式,并设置了字体颜色和大小。

最终呈现的效果上图所示,字体颜色为绿色,大小为16。虽然ContentControl也设置了字体颜色为红色,大小为36,但是已经失效了。

ButtonBase基类

ButtonBase是一个抽象类,所以,它不能被实例化。我们只能在它的子类中去使用它提供的一些属性、事件或方法成员。它只有一个事件,就是Click单击事件,毕竟鼠标双击事件在它的Control基类就有了嘛。另外,它还有一个非常厉害的Command属性,这个属性其实是一个接口,起什么作用呢?就是在单击按钮时,去执行这个Command属性所指定的一个具体命令。

这个Command命令是WPF命令系统里面的角色,也是WPF优于Winform的一个具体表现,Command命令也是MVVM模式中最重要的一环。

按钮的形式有如下:

  • Button:普通按钮
  • CheckBox: 复选框按钮
  • RadioButton: 单选框按钮
  • ToggleButton :是CheckBox、RadioButton的基类,表示可以切换状态
  • RepeatButton: 重复,表示从按下到弹出过程中重复引发Click事件
  • GridViewColumnHeader: 表示GridViewColumn 的列标题,其实它也是一个按钮
  • DataGridColumnHeader: 表示DataGrid 列标题,也是一个按钮
  • DataGridRowHeader: 表示DataGrid 行标题,也是一个按钮

1. ButtonBase的属性

  • CommandTarget:获取或设置要对其引发指定的命令的元素。
  • CommandParameter:获取或设置一个命令参数,这个参数是传递给Command 属性所指向的命令。
  • Command:获取或设置要在按此按钮时调用的命令。
  • IsPressed:获取当前按钮是否处于激活状态。
  • ClickMode:获取或设置按钮的单击模式
  • IsEnabledCore:获取的值 System.Windows.ContentElement.IsEnabled 属性。

2. ButtonBase方法

ButtonBase还提供了两个虚方法,分别是OnClick()和OnIsPressedChanged()。说明这两个方法也是可以重写的,OnClick表示在按钮单击时执行的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1989389.html

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

相关文章

AIGC大模型实践总结(非常详细)零基础入门到精通,收藏这一篇就够了

大模型浪潮席卷全球&#xff0c;在各行各业中的重要性愈发凸显&#xff0c;呈现出一股不可逆转的发展趋势。这一年本人所在业产技也在这一过程中持续探索和尝试AIGC。本文一方面是对AIGC实践的总结回顾&#xff0c;同时也是本人学习实践AIGC过程中一些笔记、心得分享。因个人能…

Linux云计算 |【第二阶段】CLUSTER-DAY4

主要内容&#xff1a; 块存储应用案例&#xff08;快照、快照回滚、快照克隆&#xff09;、分布式文件系统&#xff08;文件系统的构成&#xff1a;inode和block&#xff0c;创建存储池实现inode和block&#xff09;、对象存储&#xff08;radosgw&#xff09; 补充&#xff1…

C++ STL与string类

一 什么是STL&#xff1f; STL&#xff0c;全称是标准模板库&#xff08;Standard Template Library&#xff09;&#xff0c;是C标准库的一部分。STL提供了一些常用的数据结构和算法&#xff0c;帮助开发者更方便、高效地编写代码。通过使用STL&#xff0c;开发者不需要重复造…

吴恩达机器学习笔记 三十九 协同过滤的TensorFlow实现

TensorFlow的一个优点&#xff1a;可以自动算出成本函数的导数 如上图&#xff0c;设 f( x ) wx&#xff0c;成本 J 为(wx - 1)^2&#xff0c;用GradientTape()这个函数&#xff0c;TensorFlow会记录计算成本J所需的操作序列&#xff0c;保存在 tape 中。 dJdw为自动计算出的导…

图片转文字怎么操作?教你几招图片转文字小妙招

在日常的工作学习中&#xff0c;我们每天可能会接触到大量的图片资料&#xff0c;无论是会议纪要、书籍扫描页、还是网络上的有用信息截图&#xff0c;如果能快速将这些图片中的文字提取出来&#xff0c;无疑将极大提升我们的工作效率。下面给大家分享几种能够将图片转换成文字…

AI学习记录 - 自注意力机制的计算流程图

过段时间解释一下&#xff0c;为啥这样子计算&#xff0c;研究这个自注意力花了不少时间&#xff0c;网上很多讲概念&#xff0c;但是没有具体的流程图和计算方式总结…

多线程 01:Java 多线程学习导航,线程简介,线程相关概念的整理

一、概述 记录时间 [20240807] 立秋 & 128 创作纪念日 本文是关于 Java 多线程学习的导航篇&#xff0c;总览了有关多线程学习的几个模块。简单介绍了一些与线程相关的基本概念&#xff0c;便于后续展开多线程的学习。 前置知识&#xff1a;Java 基础篇&#xff1b;Java 面…

腾讯云AI代码助手的实用性能以及带给开发者的便捷开发陪伴

腾讯云AI代码助手的实用性能以及带给开发者的便捷开发陪伴 前言一、开发环境介绍二、腾讯云AI代码助手使用实例1 一键代码补全2 与腾讯云ai代码助手对话3 直接对源码进行注释&#xff0c;查错 三 获得的帮助与提升四 对腾讯云AI代码助手的建议总结 前言 在日常的编程工作的生活…

SQL报错注入之updatexml

目录 1.updatexml报错原理 2.判断是否有注入点 我们在地址栏中输入?id1 我们在地址栏中输入?id1-- 3.updatexml报错注入 3.1爆库名 3.2爆表名 3.3爆字段名 3.4爆数据 1.updatexml报错原理 updatexml(xml_doument,XPath_string,new_value) 第一个参数&#xff1a;XML…

07-软件参数的基本配置

1.设置交叉 2.Design insight 关闭 3.数据保存设置 4.原理图设置 5.PCB-General设置 PCB-Board Insight Modes设置 PCB-Board Insight Color Overrides PCB-DRC Violations Display PCB-Interactive Routing PCB-Defaults

【C++】C++11的新特性 — 线程库 ,原子操作 , 条件变量

勇敢就是接受发生在你身上的事&#xff0c;并把它尽力做到最好。 -- 约翰・欧文 -- C11的新特性 1 线程1.1 线程概念1.2 C中的线程1.3 线程并行1.4 锁 2 原子操作3 条件变量Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&#xff01;下…

最短路问题中的bellman-ford算法

最短路问题中的bellman-ford算法 题目 如果要处理单源最短路问题当中存在负权边的&#xff0c;那么就需要用到 bellman-ford算法和SPFA算法&#xff0c;一般情况下都是用 SPFA算法&#xff0c;除了有边数限制的情况只能用bellman-ford算法&#xff0c;比如下面这种 题目 给定…

SVG入门指南

前言 SVG 是一种使用 XML 描述 2D 图形的语言&#xff0c;与传统前端 DOM 开发比较类似&#xff0c;本文尝试总结一下 SVG 的基本用法。 基本图形绘制 与 canvas 不同&#xff0c;svg 使用声明式的方式来绘制图形&#xff0c;比如绘制一个矩形&#xff1a; <svg width&q…

Elastic 利用由 Search AI 提供支持的自动导入功能加速 SIEM 数据导入

作者&#xff1a;来自 Elastic Jamie Hynds, Mark Settle Elastic 正在通过自动导入功能自动完成 SIEM 数据导入&#xff0c;从而加速采用 AI 驱动的安全分析。这项新功能&#xff08;安全分析或 SIEM 解决方案中独一无二的功能&#xff09;可自动开发自定义数据集成。Elastic …

轻松上手MYSQL:掌握MYSQL聚合函数,数据分析不再难

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 ✨欢迎加入探索MYSQL聚合函数之旅✨ &#x1f44b; 大家好&#xff01;文本学习和探…

240807-Gradio客户端GUI与服务端API分离代码示例

A. 客户端服务端分离的最终效果 B. 前后端核心代码 Gradio支持将前端界面&#xff08;客户端&#xff09;与后端逻辑&#xff08;服务端&#xff09;分离。通过这种方式&#xff0c;客户端负责用户交互和显示&#xff0c;而服务端负责实际的数据处理和功能实现。 以下是如何实…

买Zoho企业邮箱赠公司后缀的域名吗?

随着市场上企业邮箱服务提供商的增多&#xff0c;选择适合自身需求的服务变得尤为重要。其中一个常见的问题是&#xff1a;购买Zoho企业邮箱服务时是否会赠送公司后缀的域名&#xff1f;赠送域名有哪些套路&#xff1f;本文将详细探讨这些问题。 一、买Zoho企业邮箱赠送公司后…

让三岁小孩都能理解动态规划_来自B站罐装-蜜糖

系列文章目录 文章目录 系列文章目录一、认识算法动态规划难在哪?学习目标 二、记忆化搜索 非常直觉的处理方式注意&#xff1a; 三、70.爬楼梯 入门 模板通过记忆化搜索 发现动态规划四要素 四、118.杨辉三角 使用答案空间处理&#xff08;题目给了返回值的样式&#xff09;五…

The Ether: EvilScience (v1.0.1)打靶渗透【附代码】(权限提升)

靶机下载地址: https://www.vulnhub.com/entry/the-ether-evilscience-v101,212/ 1. 主机发现端口扫描目录扫描敏感信息获取 1.1. 主机发现 nmap -sn 192.168.7.0/24|grep -B 2 00:0C:29:7F:50:FB 1.2. 端口扫描 nmap -p- 192.168.7.172 1.3. 目录扫描 dirb http://192.16…

vm虚拟机下安装CentOS7系统

VMware16安装CentOS7 1.启动之前安装的VM 具体VMware安装过程 2.配置Linux&#xff08;centos7&#xff09;的镜像文件 选择安装镜像文件 4.开启虚拟机 开始读秒安装 选择安装过程中使用的语言&#xff0c;这里选择英文、键盘选择美式键盘。点击Continue 首先设置时间…