如何在 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 中保持突出显示的文本失去焦点?的主要内容,如果未能解决你的问题,请参考以下文章

如何在UWP中数据绑定到RichEditBox的纯文本值?

RichEditBox (UWP) 在设置 Rtf 文本时忽略字体和前景

在 RichEditBox 中使用控制器进行文本选择

关于richeditbox垂直滚动条 vc

背水一战 Windows 10 (29) - 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox

控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox