根据微软的Quickstart: adding text input and editing controls,如果我想提供某种格式化的文本编辑器,我应该使用RichEditBox。不幸的是,他们在例子中如此节俭。提供的示例仅显示如何加载RTF文件以进行显示。它没有说明如何允许用户操作文档。例如,我想添加典型的格式按钮,例如B
,I
,以便用户更改即将发布/选定文本的格式。但是,我应该怎么做来处理软件键盘的用户输入?我的想象力是键盘提供" raw"字符输入,我需要正确检测和应用样式。
如果我有办法对用户输入作出反应,那么下一个问题是以编程方式更新基础文档。假设我想将用户选择更改为一些新文本。
// Change selected text; let assume I magically get the text whose format I should update and add necessary RTF stuffs; for testing, can use
String^ newText = "{\\rtf1\\ansi{\\fonttbl\\f0\\fswiss Helvetica;}\\f0\\par\n{\\b bold}\\par}";
mRichEditBox->Document->Selection->SetText(TextSetOptions::FormatRtf, newText);
// After the above line, mRichEditBox loses focus & the keyboard is dismissed so I attempt to focus it programmatically & bring back the keyboard.
Editor->Focus(Windows::UI::Xaml::FocusState::Keyboard);
// By default, after SetText, the updated text will be selected, this will put the cursor after changed text; so user can continue adding text
mRichEditBox->Document->Selection->Collapse(false);
让我们暂时原谅重复上下键盘的烦人的UI问题:用户按t
,我通过上面的代码使 t 加粗,系统自动关闭键盘,代码将其恢复,然后将光标放在 t 之后,用户可以按e
,我通过上面的代码使 e 加粗,系统自动关闭键盘,代码将其恢复,然后将光标放在 e 每次RichEditBox出/焦点时,由于RichEditBox的背景颜色变化,屏幕闪烁。你猜这个故事。但这可能是因为我暂时使用按钮来触发更改。
更严重的问题是聚焦问题:有时它会带回键盘,有时则不会。即使它确实带回了键盘,键盘现在也不复存在了:按键不再插入文本,好像键盘失去了目标!?更糟糕的是:我的手机在执行那些程序化替换后重启了几次!
任何人都可以确认这是一个现有的操作系统问题,或者我有什么办法可以解决它吗?
答案 0 :(得分:0)
您无需将自己的RTF插入RichEditBox。一般情况下,只有在保存或恢复REB时才会这样做。
要更改选择的字符属性(例如颜色,粗体,斜体等),请获取所选范围并更新其CharacterFormat。在该范围内添加的新文本将继承其周围格式,因此当用户继续键入新文本时将自动遵循前面的格式。该应用程序不应该尝试猜测InputPane的开启和关闭。
有关详细信息,请参阅MSDN上Xaml text editing sample中的方案6。这是一个快速预览:
void Scenario6::BoldButtonClick(Object^ sender, RoutedEventArgs^ e)
{
ITextSelection^ selectedText = editor->Document->Selection;
if (selectedText != nullptr)
{
ITextCharacterFormat^ charFormatting = selectedText->CharacterFormat;
charFormatting->Bold = FormatEffect::Toggle;
selectedText->CharacterFormat = charFormatting;
}
}