博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
控件(文本类): TextBlock
阅读量:6707 次
发布时间:2019-06-25

本文共 8036 字,大约阅读时间需要 26 分钟。

1、TextBlock 的示例 1

Controls/TextControl/TextBlockDemo1.xaml

111111
222222
333333
444444
555555
Run
Span
Bold
Italic
Underline

Controls/TextControl/TextBlockDemo1.xaml.cs

/* * TextBlock - 文本显示框(继承自 FrameworkElement, 请参见 /Controls/BaseControl/FrameworkElementDemo/) */using Windows.UI.Xaml;using Windows.UI.Xaml.Controls;namespace Windows10.Controls.TextControl{    public sealed partial class TextBlockDemo1 : Page    {        public TextBlockDemo1()        {            this.InitializeComponent();        }    }}

2、TextBlock 的示例 2
Controls/TextControl/TextBlockDemo2.xaml

abcdefg
hijklmn
opqrst
abcdefghijklmn
opqrstuvwxyz
abc
xyz

Controls/TextControl/TextBlockDemo2.xaml.cs

/* * TextBlock - 文本显示框(继承自 FrameworkElement, 请参见 /Controls/BaseControl/FrameworkElementDemo/) *     SelectedText - 获取选中的文本内容 *     SelectionChanged - 选中的文本内容发生变化后触发的事件 *     ContentStart - 开头内容的 TextPointer 对象 *     ContentEnd - 结尾内容的 TextPointer 对象 *     Focus(FocusState value) - 获取焦点 *     SelectAll() - 选中全部内容(先要获取焦点后,才能做这个操作) *     Select(TextPointer start, TextPointer end) - 选中指定范围的内容(先要获取焦点后,才能做这个操作) *     SelectionStart - 选中内容的起始位置(TextPointer 对象) *     SelectionEnd - 选中内容的结束位置(TextPointer 对象) *     BaselineOffset - 获取基线的位置(什么是基线:英文字符的基线基本相当于单词本4条线中的第3条线) *     IsColorFontEnabled - 是否以彩色方式显示 Segoe UI Emoji 之类的字符(默认值是 true)  * * * TextPointer - 文本框中的指针对象 *     Offset - 指针的位置 *     LogicalDirection - 指针的逻辑方向 *         Backward - 向后,即从右到左(比如,如果插入字符的话,就会在指针位置的左边插入) *         Forward - 向前,即从左到右(比如,如果插入字符的话,就会在指针位置的右边插入) *     Rect GetCharacterRect(LogicalDirection direction) - 返回当前指针的矩形框 *     TextPointer GetPositionAtOffset(offset, LogicalDirection direction) - 将指针位置偏移指定的距离(正代表向右偏移,负代表向左偏移) */using System;using System.Text;using Windows.Foundation;using Windows.UI.Xaml;using Windows.UI.Xaml.Controls;using Windows.UI.Xaml.Documents;namespace Windows10.Controls.TextControl{    public sealed partial class TextBlockDemo2 : Page    {        public TextBlockDemo2()        {            this.InitializeComponent();            this.Loaded += TextBlockDemo2_Loaded;        }        private void TextBlockDemo2_Loaded(object sender, RoutedEventArgs e)        {            textBlock1.SelectionChanged += (x, y) =>            {                // 显示用户选中的文本内容                lblMsg1.Text = textBlock1.SelectedText;            };            textBlock1.ContextMenuOpening += (x, y) =>            {                // 触发条件:触摸屏长按或鼠标右键             };            // 获取焦点            textBlock2.Focus(FocusState.Programmatic);            TextPointer start = textBlock2.ContentStart;            TextPointer end = textBlock2.ContentEnd;            // textBlock2 的 Text 的内容一共有 26 个字符,但是这里的指针位置 offset 是从 0 到 34,一共 35 个指针位置            // 
占 4 个指针位置,开头占 2 个指针位置,结尾占 2 个指针位置。剩下的就比较好理解了,就是 26 个字符拥有 27 个指针位置 lblMsg2.Text = $"ContentStart.Offset: {start.Offset}, ContentEnd.Offset: {end.Offset}"; lblMsg2.Text += Environment.NewLine; // 从左到右偏移 3 个位置,即指针位置在第 1 个字符的右边 start = start.GetPositionAtOffset(3, LogicalDirection.Backward); // 从右到左偏移 3 个位置,即指针位置在最后一个字符的左边 end = end.GetPositionAtOffset(-3, LogicalDirection.Forward); textBlock2.Select(start, end); // SelectAll() - 选中全部 lblMsg2.Text += $"SelectionStart.Offset: {textBlock2.SelectionStart.Offset}, SelectionEnd.Offset: {textBlock2.SelectionEnd.Offset}"; // 获取基线的位置,并通过 Line 绘制基线 lblMsg3.Text += $"BaselineOffset: {textBlock3.BaselineOffset}"; line.Y1 = textBlock3.BaselineOffset; line.Y2 = textBlock3.BaselineOffset; // 显示 Segoe UI Emoji 字符 StringBuilder strContect = new StringBuilder(); for (int code = 0x1F600; code < 0x1F6C6; code++) { strContect.Append(char.ConvertFromUtf32(code)); } // 是否以彩色方式显示 Segoe UI Emoji 之类的字符(默认值是 true) textBlock4.IsColorFontEnabled = true; textBlock4.Text = strContect.ToString(); // 通过封一层 Grid 的方式计算 TextBlock 的实际宽度和实际高度 lblMsg5.Text = $"textBlock5 的实际高度: {grid.ActualHeight}"; lblMsg5.Text += Environment.NewLine; lblMsg5.Text += $"textBlock5 的实际宽度: {gridColumn1.ActualWidth}"; lblMsg5.Text += Environment.NewLine; // 通过 TextPointer 的方式计算 TextBlock 的实际高度 TextPointer last = textBlock5.ContentEnd; last = last.GetPositionAtOffset(-3, LogicalDirection.Forward); Rect rectLast = last.GetCharacterRect(LogicalDirection.Forward); lblMsg5.Text += $"textBlock5 的实际高度: {rectLast.Bottom}"; lblMsg5.Text += Environment.NewLine; // 通过 TextPointer 的方式计算 TextBlock 的实际宽度 int count = textBlock5.ContentEnd.Offset - textBlock5.ContentStart.Offset; double width = 0; for (int i = 0; i < count; i++) { TextPointer current = textBlock5.ContentStart.GetPositionAtOffset(i, LogicalDirection.Backward); width = Math.Max(width, current.GetCharacterRect(LogicalDirection.Backward).Right); } lblMsg5.Text += $"textBlock5 的实际宽度: {width}"; } }}

3、使用自定义字体, 使用 Unicode 编码
Controls/TextControl/Tips.xaml

Controls/TextControl/Tips.xaml.cs

/* * 演示文本类控件如何使用自定义字体,以及使用 Unicode 编码 */using Windows.UI.Xaml.Controls;namespace Windows10.Controls.TextControl{    public sealed partial class Tips : Page    {        public Tips()        {            this.InitializeComponent();        }    }}

转载于:https://www.cnblogs.com/ansen312/p/5913395.html

你可能感兴趣的文章
Git tag 给当前分支打标签
查看>>
route命令实例练习
查看>>
spring boot 2.0之基础入门
查看>>
钟南山:高收入群体往往老得快
查看>>
线程相关内存参数sort_buffer/join_buffer等的内存分配时机
查看>>
MSSQL · 最佳实践 · SQL Server备份策略
查看>>
如何调整word中表格某一列占半分比
查看>>
重构——34分解条件表达式(Decompose Conditional)
查看>>
mysql死锁问题分析(转)
查看>>
阿里云推出应用配置管理新工具 助力企业效能几何式提升
查看>>
一个程序员的陪产经历--写在宝宝百日之际
查看>>
汽车有眼睛和有眼睛的汽车
查看>>
SQL Server 数据库中的几个常见的临界值
查看>>
解决IPOD NANO7无法开机
查看>>
HBase的scan源码分析客户端部分之整体流程(一)
查看>>
Adobe终于放大招联网玩Cloud技术了么?
查看>>
openstack基本命令
查看>>
背水一战 Windows 10 (30) - 控件(文本类): AutoSuggestBox
查看>>
ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系
查看>>
港科大KDD 2017录用论文作者详解:基于异构信息网络元结构融合的推荐系统
查看>>