如何为UWP TextBlock中的特定Run元素设置鼠标悬停光标
针对Xamarin.Forms UWP平台TextBlock指定Inline设置光标的实现方案
方案1:替换目标Run为Hyperlink(成本最低,无需自定义渲染器)
Hyperlink 继承自 Inline 类型,原生支持 Cursor 属性自定义,且可以无缝插入 TextBlock.Inlines 集合,操作步骤如下:
- 定位到你需要设置光标的目标
Windows.UI.Xaml.Documents.Run元素 - 新建一个
Windows.UI.Xaml.Documents.Hyperlink对象,将原Run的Text、FontSize、Foreground、FontFamily等所有显示属性复制到该Hyperlink中 - 设置Hyperlink的
UnderlineStyle为UnderlineStyle.None,消除默认的下划线样式,保证视觉效果和原Run完全一致 - 给Hyperlink的
Cursor属性设置为你需要的光标类型 - 将原Run从
TextBlock.Inlines集合中移除,在对应位置插入新建的Hyperlink即可
方案2:指针位置偏移判断(无需修改Inline结构)
如果你完全不能修改Inlines集合的元素结构,可以通过指针位置映射实现:
- 监听
TextBlock的PointerMoved事件 - 事件触发时调用
TextBlock.GetPositionFromPoint(e.GetCurrentPoint(textBlock).Position, true)拿到当前指针指向的TextPointer对象 - 对比该
TextPointer所属的父Inline是否为你的目标Inline - 如果是目标Inline,将
TextBlock的Cursor设置为目标样式,否则重置为默认光标 - 同时监听
PointerExited事件,指针离开TextBlock时重置光标即可
两种方案都不需要开发自定义渲染器,仅通过修改属性、监听现有控件事件即可实现,完全符合你的约束条件。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

