我正在使用RichEditBox
构建一个简单的编辑器。
我找到了一段代码,用于在文档窗口中的选项上切换粗体文本
private void RichEditBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
var state = Window.Current.CoreWindow.GetKeyState(Windows.System.VirtualKey.Control);
if ((state & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down)
{
if (e.Key == Windows.System.VirtualKey.B)
{
if (Editor.Document.Selection.Text.Length > 0)
{
ITextCharacterFormat format = Editor.Document.Selection.CharacterFormat;
format.Bold = FormatEffect.On;
}
else
{
// CTRL + B should toggle bold mode on or off here.
}
}
}
}
当我突出显示一段文字,然后按CTRL+B
时,它会加粗文字。结果。但是,在该点之后我输入的任何内容也都是粗体。
这不是我的预期。根据上面的代码,我只影响Selection的格式。
当我选择一些文字并按CTRL+B
时,它应该在该选择上切换粗体格式 ,并保留默认格式。
我尝试过使用FormatEffect.Toggle
format.Bold = FormatEffect.Toggle
我已经尝试先保存文档字符格式,然后重新应用
ITextCharacterFormat original_format = Editor.Document.GetDefaultCharacterFormat();
ITextCharacterFormat format = Editor.Document.Selection.CharacterFormat;
format.Bold = FormatEffect.On;
Editor.Document.SetDefaultCharacterFormat(original_format);
这应该将默认值重置为粗体后的状态。但它没有
我可以将选择设置为空,然后再次设置format.Bold = FormatEffect.Off
,然后重新选择文本,但这似乎是很长的路(它可能不起作用)。必须有一个简单的方法来做到这一点?
注意:我已使用RichTextBox标记对其进行了标记,因为没有RichEditBox标记。有> 1500代表的人可以加一个吗?
答案 0 :(得分:0)
使用SelectionFont
并使用richtextbox设置粗体样式时,这是正常行为。
如果当前文本选择指定了多个字体,则为此 property为null。如果当前未选择任何文本,则指定字体 在此属性中应用于当前插入点和所有 在插入点之后键入控件的文本。
这可能与你有同样的问题。 Wordpad和Word也是这样工作的。
答案 1 :(得分:0)
我找到了一个有效的黑客。我发布这个作为任何被卡住的人的答案,但我不接受答案,因为必须有一个更好的答案。
private void RichEditBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
var state = Window.Current.CoreWindow.GetKeyState(Windows.System.VirtualKey.Control);
if ((state & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down)
{
if (e.Key == Windows.System.VirtualKey.B)
{
if (Editor.Document.Selection.Text.Length > 0)
{
// text is selected. make it bold
ITextCharacterFormat format =
Editor.Document.Selection.CharacterFormat;
format.Bold = FormatEffect.On;
var start_pos = Editor.Document.Selection.StartPosition;
Editor.Document.Selection.StartPosition =
Editor.Document.Selection.EndPosition;
format.Bold = FormatEffect.Off;
// Editor.Document.Selection.StartPosition = start_pos;
// this is where I was re-selecting the text after switching bold OFF
// but doing so switches it back on again. which makes no sense
}
else
{
// no text selected. just enable bold mode
ITextCharacterFormat format =
Editor.Document.Selection.CharacterFormat;
format.Bold = FormatEffect.Toggle;
}
}
}
}
这并不完美,因为在您选择并加粗文本后,它会自动取消选中。但实际上我发现这对我来说确实很好。不过,感觉就像是黑客,因为 是黑客