如何在 WinRT/UWP RichEditBox 中保持突出显示的文本失去焦点?
Posted
技术标签:
【中文标题】如何在 WinRT/UWP RichEditBox 中保持突出显示的文本失去焦点?【英文标题】:How to keep highlighted text in WinRT/UWP RichEditBox on focus lost? 【发布时间】:2017-04-18 08:42:56 【问题描述】:我正在使用RichEditBox
,我正在实现一些选项,让用户编辑带有某种格式的文本。
问题是每次控件失去焦点时,高亮选择被隐藏,即使选择保持活动并且我实际上可以处理它。 p>
这是我正在使用的Template
,如您所见,我已经删除了所有VisualState
,但这并没有解决问题。
<Style TargetType="RichEditBox" x:Key="CustomRtfEditBoxStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RichEditBox">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Disabled" />
<VisualState x:Name="Normal" />
<VisualState x:Name="PointerOver" />
<VisualState x:Name="Focused" />
<VisualState x:Name="UnFocused" />
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
...
现在,我想这不是问题所在,选择是在控件内部代码的某处进行管理的。
注意:我不能实际上使用workaround手动设置焦点丢失和获得时的选择背景颜色,因为文本是导出/加载为富文本,我不能弄乱用户设置。我需要一种方法来做到这一点,而无需实际更改格式化文本。
我注意到RichEditBox
类不是sealed
,所以我想知道是否可以覆盖某些行为或做一些事情来解决这个问题,但我不知道从哪里开始。
我知道在 WPF 上还有其他一些解决方法可以解决这个问题(比如在失去焦点时保持突出显示的方便属性),但 UWP 上不存在。
您对如何执行此操作有任何想法吗?谢谢!
【问题讨论】:
【参考方案1】:事实证明没有简单/内置的方法来完成此操作,因此我使用了此解决方法:
EditBox.PreventKeyboardDisplayOnProgrammaticFocus = true;
EditBox.Focus(FocusState.Programmatic);
在设置PreventKeyboardDisplayOnProgrammaticFocus
属性后调用Focus
方法会使文本再次突出显示,而不再显示虚拟键盘。
此方法使高亮颜色“闪烁”几分之一秒(在控件失去焦点后,直到它再次获得焦点,取决于调用 Focus
方法的速度),但它并不那么烦人,它现在解决了这个问题。
【讨论】:
这是另一种解决方法:***.com/questions/37524488/…以上是关于如何在 WinRT/UWP RichEditBox 中保持突出显示的文本失去焦点?的主要内容,如果未能解决你的问题,请参考以下文章
RichEditBox (UWP) 在设置 Rtf 文本时忽略字体和前景
背水一战 Windows 10 (29) - 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox