我有以下代码在RichEditBox中加粗和斜体显示文本:
private async void Page_KeyDown(object sender, KeyRoutedEventArgs e)
{
var state = Window.Current.CoreWindow.GetKeyState(Windows.System.VirtualKey.Control);
if ((state & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down)
{
switch (e.Key)
{
case Windows.System.VirtualKey.B:
await BoldText();
break;
case Windows.System.VirtualKey.I:
await ItaliciseText();
break;
}
}
}
private async Task BoldText()
{
ITextSelection selectedText = editor.Document.Selection;
if (selectedText != null)
{
ITextCharacterFormat charFormatting = selectedText.CharacterFormat;
charFormatting.Bold = FormatEffect.Toggle;
selectedText.CharacterFormat = charFormatting;
}
}
private async Task ItaliciseText()
{
ITextSelection selectedText = editor.Document.Selection;
if (selectedText != null)
{
ITextCharacterFormat charFormatting = selectedText.CharacterFormat;
charFormatting.Italic = FormatEffect.Toggle;
selectedText.CharacterFormat = charFormatting;
}
}
BoldText()
和ItaliciseText()
也会从工具栏上的按钮调用。
按下Bold
时,所选文本将正确格式化为粗体文本。
按下CTRL+B
时,所选文本将正确格式化为粗体文本。
按下Italic
时,所选文本将格式化为斜体文本
按下CTRL+I
后,所选文字格式化为斜体文字,但随后删除
我知道格式化正在发生,因为如果按CTRL + Z,文本将以斜体显示。 CTRL + I在selectedText.CharacterFormat = charFormatting;
擦除文本后导致其他操作。
我无法弄清楚为什么会发生这种情况,因为代码与完美无瑕的BoldText()代码完全相同,而且当从工具栏上的按钮触发时,这些代码和文字完全相同。
任何想法?
答案 0 :(得分:2)
Ctrl+I
可能有另一个处理程序(可能是导致文本被删除的处理程序),考虑设置KeyRoutedEventArgs.Handled = true;
,请参阅this,(在本例中为e.Handled=true;
)你不希望这个KeyEvent被处理在你以外的地方。
答案 1 :(得分:-1)
为什么你不使用,它是一个很好的工具,可以轻松下载 http://www.textcontrol.com/en_US/sites/introduction/?gclid=CPTaj_LQh7wCFcJd3godZA4AZg