如何在 WinRT/UWP RichEditBox 失去焦点时保持突出显示的文本?
How to keep highlighted text in WinRT/UWP RichEditBox on focus lost?
我正在使用 RichEditBox
并且我正在实施一些选项来让用户编辑具有某种格式的文本。
问题是每次控件 失去焦点 时,突出显示的选择被隐藏,即使选择 保持活动状态 并且我实际上可以解决它。
这是我正在使用的 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手动设置焦点时的选区背景色失去和获得,因为文本是 exported/loaded 作为富文本,我不能弄乱用户设置。我需要一种无需实际更改格式化文本即可执行此操作的方法。
我注意到 RichEditBox
class 不是 sealed
,所以我想知道是否可以覆盖某些行为或做一些事情来解决这个问题,但我不会不知道从哪里开始。
我知道在 WPF 上有一些其他解决方法可以解决这个问题(比如方便的 属性 在焦点丢失时保持突出显示),但 UWP 上没有。
你知道怎么做吗?谢谢!
原来没有 easy/built-in 方法来完成这个,所以我使用了这个解决方法:
EditBox.PreventKeyboardDisplayOnProgrammaticFocus = true;
EditBox.Focus(FocusState.Programmatic);
设置PreventKeyboardDisplayOnProgrammaticFocus
后调用Focus
方法属性使文本再次高亮显示,而不会再次显示虚拟键盘。
此方法使高亮颜色 "flash" 持续几分之一秒(控件失去焦点后,直到它再次获得焦点,具体取决于 Focus
方法的调用速度),但这并没有那么烦人,它暂时解决了这个问题。
我正在使用 RichEditBox
并且我正在实施一些选项来让用户编辑具有某种格式的文本。
问题是每次控件 失去焦点 时,突出显示的选择被隐藏,即使选择 保持活动状态 并且我实际上可以解决它。
这是我正在使用的 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手动设置焦点时的选区背景色失去和获得,因为文本是 exported/loaded 作为富文本,我不能弄乱用户设置。我需要一种无需实际更改格式化文本即可执行此操作的方法。
我注意到 RichEditBox
class 不是 sealed
,所以我想知道是否可以覆盖某些行为或做一些事情来解决这个问题,但我不会不知道从哪里开始。
我知道在 WPF 上有一些其他解决方法可以解决这个问题(比如方便的 属性 在焦点丢失时保持突出显示),但 UWP 上没有。
你知道怎么做吗?谢谢!
原来没有 easy/built-in 方法来完成这个,所以我使用了这个解决方法:
EditBox.PreventKeyboardDisplayOnProgrammaticFocus = true;
EditBox.Focus(FocusState.Programmatic);
设置PreventKeyboardDisplayOnProgrammaticFocus
后调用Focus
方法属性使文本再次高亮显示,而不会再次显示虚拟键盘。
此方法使高亮颜色 "flash" 持续几分之一秒(控件失去焦点后,直到它再次获得焦点,具体取决于 Focus
方法的调用速度),但这并没有那么烦人,它暂时解决了这个问题。