根据微软的快速入门:添加文本输入和编辑控件,如果我想提供某种格式化的文本编辑器,我应该使用RichEditBox 。不幸的是,他们在例子中非常节俭。提供的示例仅说明如何加载 RTF 文件进行显示。它没有说明如何允许用户操作文档。例如,我想添加典型的格式按钮,例如B
,I
让用户更改即将到来/选定的文本的格式。但是,我应该怎么做才能处理来自软件键盘的用户输入呢?我的想象是键盘提供“原始”字符输入,我需要正确检测和应用样式。
如果我有办法对用户输入做出反应,那么下一个问题就是以编程方式更新底层文档。假设我想将用户选择更改为一些新文本。
// 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 发生变化。你猜故事。但这可能是因为我暂时使用按钮来触发更改。
更严重的问题是焦点问题:有时它会带回键盘,有时它不会。即使它确实带回了键盘,键盘现在也失效了:按键不再插入文本,就好像键盘失去了它的目标一样!?更糟糕的是:我的手机在执行了几次程序化替换后重新启动!
谁能确认这是一个现有的操作系统问题,或者我可以做些什么来解决它?