WPF学习(10)-Label标签+TextBlock文字块+TextBox文本框+RichTextBox富文本框

Label标签

Label控件继承于ContentControl控件,它是一个文本标签,如果您想修改它的标签内容,请设置Content属性。我们曾提过ContentControl的Content属性是object类型,意味着Label的Content也是可以设置为任意的引用类型的

案例

前端代码

 <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"><Label Content="这是一个Label标签"/><Label><Label.Content><Button Content="确定" Click="_Button1_Click"/></Label.Content></Label></StackPanel>

后端代码

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

在这里插入图片描述
我们给第二个标签的Content属性设置了一个按钮,并对按钮的Click事件做了订阅回调。此时的Button是可以正常使用 。只不过,通常情况下,我们的Label只是用来显示一段文字,很少在Contnet里面编写其它控件代码。如果要编写其它控件代码以实现更复杂的自定义控件效果,建议使用UserControl用户控件。

对于文本的显示,除了可以在Label中显示,还有一个控件也可以实现,那就是TextBlock文字块。而且,TextBlock控件直接从FrameworkElement基类继承而来,效率比Label标签更高。

TextBlock文字块

TextBlock是专业处理文本显示的控件,在功能上比Label更全面。

1. 属性说明

TextBlock提供了非常丰富的文本相关的属性。

  • FontWeight :获取或设置TextBlock的字体粗细。
  • FontStyle :获取或设置TextBlock的字体样式,如斜体字体。
  • FontFamily :获取或设置TextBlock的字体系列,如微软雅黑。
  • Text :获取或设置TextBlock的字体内容。
  • ContentEnd :表示获取TextBlock内容的最末尾的TextPointer对象。
  • Typography :获取此元素的内容当前有效的版式变体。
  • FontStretch: 获取或设置 TextBlock 的常用字体拉伸特征。
  • BaselineOffset :获取或设置文本的每个行相对于基线的偏移量。
  • FontSize: 获取或设置TextBlock的字号。
  • TextWrapping: 获取或设置TextBlock的文字的换行方式。
  • Background: 获取或设置TextBlock控件的背景颜色(画刷)。
  • TextEffects: 获取或设置要应用于此元素中的文本内容的效果。
  • LineHeight: 获取或设置各行内容的高度。
  • Padding :指示内容区域的边界之间填充空间的宽度。
  • TextAlignment :指示文本内容的水平对齐方式。
  • TextTrimming :获取或设置在内容超出内容区域时要采用的文本剪裁行为。
  • Foreground :获取或设置文本内容的字体颜色(画刷)。
  • Inlines :这个属性是一个集合,其中的元素表示内联流内容元素,简单点说,一行文本可以看成是一个Inline元素,而TextBlock可以接受多- 个Inline。Run继承于Inline,实际使用中,我们会创建多个Run实例,可以单独为每个Run对象设置字体字号颜色等等。
  • ContentStart: 表示获取TextBlock内容的最开始的TextPointer对象。

2. 案例

 <WrapPanel><TextBlock Text="这是一个TextBlock文字块" Margin="5"/><TextBlock Text="粗体文字" FontWeight="Bold" Margin="5"/><TextBlock Text="粗体文字" FontWeight="Light" Margin="5"/><TextBlock Text="斜体文字" FontStyle="Italic"  Margin="5"/><TextBlock Text="微软雅黑" FontFamily="Microsoft YaHei UI"  Margin="5"/><TextBlock Text="大号字体" FontSize="30"  Margin="5"/><TextBlock Text="红色文字" Foreground="Red" Margin="5"/><TextBlock Text="底色文字" Foreground="Yellow" Background="Red" Margin="5"/><TextBlock Text="内间距文字" Foreground="Yellow" Background="Red" Padding="10" Margin="5"/><TextBlock Background="LightGray" Height="25"><Run Foreground="Red">这行文字</Run><Run Foreground="Green">由三部分</Run><Run Foreground="Blue">组成</Run></TextBlock><Grid Width="150" Height="100" Margin="5" Background="LightGoldenrodYellow"><TextBlock Text="这段文字体现了文字的文本换行属性TextWrapping" TextWrapping="Wrap" Margin="10"/></Grid><!--使用Run--><Grid><TextBlock x:Name="textblock"  Width="320" Height="100" FontSize="15" FontFamily="微软雅黑" FontWeight="Black" FontStretch="Condensed" Foreground="#dddddd" Background="Teal" TextAlignment="Center" TextWrapping="Wrap" TextTrimming="CharacterEllipsis" Margin="10" Padding="5"HorizontalAlignment="Left" VerticalAlignment="Center" LineHeight="30" ToolTip="《临江仙·滚滚长江东逝水》"><Run Foreground="#CDB632" TextDecorations="Underline">滚滚长江东逝水,浪花淘尽英雄。是非成败转头空。青山依旧在,几度夕阳红。</Run><Run Text="白发渔樵江渚上,惯看秋月春风。一壶浊酒喜相逢。古今多少事,都付笑谈中。 "></Run></TextBlock></Grid></WrapPanel>

在这里插入图片描述
TextBlock大多数的属性应用都比较简单,容易理解。

Inlines属性是一个比较强大的属性,深入理解后,可以实现意想不到的效果。

TextEffects也是一个非常强大的属性,这需要掌握WPF的动画、触发器、关键帧等知识,才能实现文本的动画特效。我们将在学完动画后,再回头探讨这些内容。

TextBox文本框

几乎所有的文本、数字、符号的输入都是用TextBox文本框来完成的。TextBox用来获取用户的键盘输入的信息,这也是一个常用的控件。
它继承于TextBoxBase,而TextBoxBase又继承于Control。

1. TextBoxBase基类属性成员

  • VerticalScrollBarVisibility: 垂直滚动条是否显示
  • HorizontalScrollBarVisibility :水平滚动条是否显示
  • AcceptsReturn :表示用户按下回车键时是否插入新行。
  • AcceptsTab: 用来设置用户按下tab键的响应,为true表示插入一个制表符,否则将焦点移动到标记为制表位的下一个控件且不插入制表符。
  • IsReadOnlyCaretVisible: 表示只读文本框是否显示插入符号,用得较少。
  • SelectionOpacity :用来设置用户选中的文本的透明度。
  • IsUndoEnabled: 表示文本编辑控件是否启用撤消支持。
  • UndoLimit :获取或设置存储在撤消队列中的操作数目。
  • AutoWordSelection :表示自动选择字词,默认为false。
  • SelectionBrush :表示用户选择的文本段落的画笔,比较常用。
  • IsReadOnly: 表示文本框是否只读,这个属性经常使用。
  • CaretBrush :表示获取或设置用于绘制的文本框中插入符号的画笔。
  • IsInactiveSelectionHighlightEnabled :表示获取或设置一个值,该值指示当文本框没有焦点时,文本框中是否显示选定的文本。

2. TextBoxBase基类事件成员

TextBoxBase基类提供了两个事件,分别是TextChanged和SelectionChanged。

  • TextChanged事件:只要文本框中的内容被修改,将会触发引事件,这通常用来做一些判断业务。比如某个文本框只能输入数字,那就可以去订阅TextChanged事件。

  • SelectionChanged事件:选中的文本框内容发生改变时引发的事件。

3. TextBox控件属性成员

  • MinLines:获取或设置最小可见的行数。
  • MaxLines:获取或设置可见行的最大数目。
  • Text:获取或设置文本框的文本内容。
  • CharacterCasing:获取或设置文本框字符的大小写形式,默认不转换。 它是一个枚举,Normal表示不转换大小写,Lower表示全部转换成小写,Upper表示全部转换成大写
  • MaxLength:获取或设置最大可以在文本框中手动输入的字符数。
  • TextAlignment:获取或设置文本框的内容的水平对齐方式。例如左对齐,右对齐,居在对齐和两端对齐。
  • CaretIndex:获取或设置插入点移动的插入位置索引。
  • SelectionLength:获取或设置一个值,该值在文本框中当前所选内容中的字符数。
  • SelectionStart:获取或设置当前所选内容的起始位置的字符索引。
  • Typography :获取文本框中的文本内容的当前有效的版式变体。
  • LineCount :获取文本框中的总行数。
  • TextDecorations :获取要应用于文本框中的文本修饰。
  • SelectedText :获取或设置文本框中当前选择的内容。
  • TextWrapping :获取或设置文本框中文本的换行方式。这个属性比较常用,在较长的文字段落显示时可以设置为Wrap,这样自动换行,界面呈现的效果比较令人满意。

TextBox文本框本身没有任务事件,都是继承父类的事件。

4. 案例

前端代码


<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"><TextBlock Text="用户名" Margin="5"/><TextBox x:Name="_textbox" Width="100" Height="25" MaxLength="10" CharacterCasing="Upper"/><Button x:Name="_button" Content="确定" Height="25" Margin="5 0" Click="_button_Click"/>
</StackPanel>

后端代码

 public partial class MainWindow{public MainWindow(){InitializeComponent();}private void _button_Click(object sender, RoutedEventArgs e){MessageBox.Show($"您的用户名:{_textbox.Text}");}}

在这里插入图片描述
在这里插入图片描述
我们使用了CharacterCasing="Upper"这个设置,可以看到图片中的显示效果,虽然我在输入时是小写的china字符,但是,TextBox会转换成大写的CHINA,另外,总长度不能超过10个字符。

最后要获取TextBox文本框的内容,使用Text属性即可。当我们在学习了样式之后,我们还会回过头来,对TextBox控件进行深入学习。另外,TextBox还有一个控件,也是继承于TextBoxBase基类,它叫RichTextBox 类。这个控件的功能更加强大,能够对FlowDocument流文档进行操作。如果想开发类似Word的桌面软件,RichTextBox 和FlowDocument搭配组合是非常好的选择。

RichTextBox富文本框

RichTextBox继承于TextBoxBase基类,所以很大程度上与TextBox控件类似,两者在某些情况下可以互相替换。但是,如果要为用户提供更强大的文档编辑功能,非RichTextBox莫属。

RichTextBox控件有一个带参数的构造函数,参数的类型是FlowDocument类,另外,它还有一个Document属性,类型也是FlowDocument类,说明RichTextBox控件的元素必须且只能是FlowDocument类,如果试图将RichTextBox.Document=null,会发现它会报错。

案例

前端代码

<StackPanel><RichTextBox x:Name="_richTextBox" Margin="10 5" Height="270"><FlowDocument><Paragraph>RichTextBox富文本框控件到底有什么强大的功能?<Bold Foreground="DarkRed">请看下面.</Bold></Paragraph><Paragraph Foreground="Blue">RichTextBox唯一的子元素是FlowDocument</Paragraph><Paragraph Foreground="DarkGreen">FlowDocument是指流文档,一个流文档由一个或多个Block构成,所以它有一个Blocks属性。Block只是一个抽象基类,所以流文档的子元素其实是继承了Block的子类,例如:</Paragraph><List MarkerOffset="25" MarkerStyle="Decimal"  StartIndex="1"><ListItem><Paragraph>BlockUIContainer(UI元素容器)</Paragraph></ListItem><ListItem><Paragraph>List(有序列表)</Paragraph></ListItem><ListItem><Paragraph>Paragraph(段落)</Paragraph></ListItem><ListItem><Paragraph>Section(分组)</Paragraph></ListItem><ListItem><Paragraph>Table(网格)</Paragraph></ListItem></List></FlowDocument></RichTextBox><Button x:Name="_button" Content="确定" Margin="10,5" Click="_button_Click"/></StackPanel>

后端代码

 public partial class MainWindow{public MainWindow(){InitializeComponent();}private void _button_Click(object sender, RoutedEventArgs e){TextRange textRange = new TextRange(_richTextBox.Document.ContentStart, _richTextBox.Document.ContentEnd);MessageBox.Show(textRange.Text);Paragraph paragraph = new Paragraph();Run run = new Run($"当前时间:{DateTime.Now}"); //手动加换行run.Foreground = Brushes.Black;paragraph.Inlines.Add(run);_richTextBox.Document.Blocks.Add(paragraph);}}

在这里插入图片描述
如上所示,我们在窗体中实例化了一个RichTextBox控件,并实例化了一个FlowDocument对象。RichTextBox唯一的子元素是FlowDocument。

FlowDocument是指流文档,一个流文档由一个或多个Block构成,所以它有一个Blocks属性。Block只是一个抽象基类,FlowDocument流文档的子元素都继承了Block抽象基类,例如:

  • BlockUIContainer(UI元素容器)
  • List(有序列表)
  • Paragraph(段落)
  • Section(分组)
  • Table(网格)

BlockUIContainer是一个非常强大的段落元素,因为它可以直接包含WPF的控件。这样一来,我们就可以将设计的UI写入到流文档中显示或打印。

上面这五个元素继承了TextElement、FrameworkContentElement和ContentElement三个父素,所以实际上这五个子元素就拥有了许多字体属性的设置、资源、样式、数据绑定、以及各种事件的应用。

如果要获取RichTextBox的文本信息,可以使用TextRange类。FlowDocument类有两个属性,分别ContentStart和ContentEnd,表示文字内容的开始和结束。

所以通过TextRange类的Text,我们就能访问到RichTextBox控件的内容。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我的cesium for UE踩坑之旅(蓝图、UI创建)

我的小小历程 过程创建对应目录&#xff0c;并将要用到的图片、资源放入对应目录下内容浏览器 窗口中右键&#xff0c;创建一个控件蓝图&#xff0c;用来编辑界面UI绘制画布面板&#xff08;canvas&#xff09;调整整体布局加入对应的控件将UI加入到关卡中 备注搜索不到 Add To…

如何在Zoom中集成自己的app?一个简单的例子

一、注册zoom 账号、以便在zoom app maketplace创建app。 二、安装git、node.js、vscode开发环境&#xff08;略&#xff09;。 三、注册ngrok账号&#xff0c;获得一个免费的https静态域名。 四、配置zoom app(wxl)&#xff0c;设置上一步获得的https静态域名&#xff0c;验证…

进阶学习-----练习线程思维解决实际问题

线程在IT行业的实际应用 1. 多线程编程 在软件开发中&#xff0c;多线程编程是一种常见的技术&#xff0c;它允许程序同时执行多个任务。以下是多线程编程的一些具体应用&#xff1a; 任务分解&#xff1a;将一个大的任务分解为多个小任务&#xff0c;每个小任务由一个线程执…

C#基础——泛型

泛型 C# 中的泛型是一种强大的编程特性&#xff0c;它允许你编写类型安全且灵活的代码。泛型允许你定义类、结构体、接口、方法和委托&#xff0c;而不必在编译时指定具体的数据类型。相反&#xff0c;你可以使用类型参数来定义泛型类型或方法&#xff0c;然后在使用时指定具体…

springboot高校实验室安全管理系统-计算机毕业设计源码73839

目 录 摘要 1 绪论 1.1 研究背景 1.2 选题意义 1.3研究方案 1.4论文章节安排 2相关技术介绍 2.1 B/S结构 2.2 Spring Boot框架 2.3 Java语言 2.4 MySQL数据库 3系统分析 3.1 可行性分析 3.2 系统功能性分析 3.3.非功能性分析 3.4 系统用例分析 3.5系统流程分析…

算法板子:最短路问题——包含朴素Dijkstra算法、堆优化版的Dijkstra算法、SPFA算法、Floyd算法

目录 1. 几种算法的用途2. Dijkstra算法——求源点到其他所有点的最短路径(不能处理负边权)&#xff08;1&#xff09;朴素Dijkstra算法——适用于稠密图&#xff08;2&#xff09;堆优化版的Dijkstra算法——适用于稀疏图 4. SPFA算法——求源点到其他所有点的最短路径、判断是…

WordPress原创插件:disable-gutenberg禁用古腾堡编辑器和小工具

WordPress原创插件&#xff1a;disable-gutenberg禁用古腾堡编辑器和小工具 disable-gutenberg插件下载:https://download.csdn.net/download/huayula/89616495

SpringBoot快速学习

目录 SpringBoot配置文件 多环境配置 SpringBoot整合junit SpringBoot整合mybatis 1.在创建时勾选需要的模块 2.定义实体类 3.定义dao接口 4.编写数据库配置 5.使用Druid数据源 SpringBoot 是对 Spring 开发进行简化的。 那我们先来看看SpringMVC开发中的一些必须流…

翻译: 梯度下降 深度学习神经网络如何学习一

在上一节影片里我讲解了神经网络的结构 首先我们来快速回顾一下 在本节影片里&#xff0c;我们有两个目标 首介绍梯度下降的概念 它不仅是神经网络工作的基础 也是很多其他机器学习方法的基础 然后我们会研究一下这个特别的网络是如何工作的 以及这些隐藏的神经元层究竟在寻找什…

使用Openvino部署C++的Yolov5时类别信息混乱问题记录

使用Openvino部署C的Yolov5时类别信息混乱问题记录 简单记录一下。 一、问题描述 问题描述&#xff1a;在使用Yolov5的onnx格式模型进行C的Openvino进行模型部署时&#xff0c;通过读取classes.txt获得类别信息时&#xff0c;出现模型类别混乱&#xff0c;或者说根本就不给图…

如何将avi格式转换为flv格式呢?

FLV是随着FLASH MX的推出发展而来的一种视频格式&#xff0c;目前被众多新一代视频分享网站所采用&#xff0c;是目前增长较快&#xff0c;也较为广泛的视频传播格式。 FLV格式可以轻松导入FLASH播放器中&#xff0c;另外它还能起到保护版权的作用&#xff0c;非常受欢迎。那么…

在优化微信、支付宝小程序用户体验时有哪些关键指标

在优化小程序用户体验时&#xff0c;有几个关键指标需要特别关注&#xff0c;这些指标不仅能够帮助评估当前的用户体验状况&#xff0c;还能为后续的优化工作提供明确的方向。以下是一些关键指标及其解释&#xff1a; 1. 日活跃用户&#xff08;DAU&#xff09; 是指每天使用…

『 Linux 』网络基础

文章目录 协议分层OSI 七层模型TCP/IP 四层(五层)模型网络协议栈与操作系统的联系报文TCP/IP 通讯过程以太网通信的过程以太网的数据碰撞 协议分层 协议分层是计算机网络中奖网络协议进行组织和管理的方法; 通过将网络通信过程分成多个层次,每个层次负责特定的功能从而简化网络…

触屏交互设备的安全风险

现实中的绝大多数电子设备都具有交互性&#xff0c;而现在越来越多的公共场合有布置越来越多的带触屏的交互设备&#xff0c;功能有简单的&#xff0c;有复杂的&#xff0c;布置的场所和应用的场合也各有不同&#xff0c;几乎在任何一个大型公共场合都可以看到这样的设备&#…

【算法 03】雇佣问题

“雇用问题”及其算法优化 在日常生活和工作中&#xff0c;我们经常会遇到需要从多个选项中做出选择的情况&#xff0c;而“雇用问题”正是这样一个典型的例子。在这个问题中&#xff0c;我们不仅要考虑如何高效地找到最佳候选人&#xff0c;还要关注整个过程中的成本。今天&a…

提高工作效率: AWS Gen AI 在几秒钟内总结会议记录

欢迎来到雲闪世界。全面介绍如何利用 AWS Lambda、Bedrock 和 S3 创建总结会议记录的工作流程 免责声明&#xff1a;本文中使用的会议记录纯属虚构&#xff0c;仅用于作为本文说明和教育目的。它并不反映任何实际的对话、事件或个人。任何与实际人物或事件的相似之处纯属巧合。…

为什么网站要使用HTTPS访问

网站使用HTTPS访问的原因有很多&#xff0c;主要可以归纳为以下几个关键点&#xff1a; 1、数据安全性&#xff1a;HTTPS使用SSL/TLS协议对通信过程进行加密&#xff0c;确保信息在传输过程中不被窃取、篡改或冒充。对于涉及敏感信息&#xff08;如个人身份、信用卡号等&#x…

数字人解决方案——音频驱动机器人

音频集成 机器人 标志着 人工智能&#xff08;AI&#xff09;。 想象一下&#xff0c;机器人可以通过视觉和听觉导航并与周围环境互动。音频驱动的机器人使这成为可能&#xff0c;提高了它们更高效、更直观地执行任务的能力。这一发展可能会影响到各个领域&#xff0c;包括家庭…

github技巧和bug解决方法短篇收集

有一些几句话就可以说明白的观点或者解决的的问题&#xff0c;小虎单独收集到这里。 Commits没有算入每天的activity fork的仓库是不算的。 Commits made in a fork will not count toward your contributions. 参考&#xff1a; Contribution activity not shown for github…

鸿蒙HarmonyOS开发:如何使用第三方库,加速应用开发

文章目录 一、如何安装 ohpm-cli二、如何安装三方库1、在 oh-package.json5 文件中声明三方库&#xff0c;以 ohos/crypto-js 为例&#xff1a;2、安装指定名称 pacakge_name 的三方库&#xff0c;执行以下命令&#xff0c;将自动在当前目录下的 oh-package.json5 文件中自动添…