-1

我正在使用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 rep的人可以添加一个吗?

4

2 回答 2

0

SelectionFont这是使用richtextbox 设置粗体样式时的正常行为。

如果当前文本选择指定了多个字体,则此属性为空。如果当前未选择任何文本,则此属性中指定的字体将应用于当前插入点以及在插入点之后键入到控件中的所有文本。

这可能与您遇到的问题相同。写字板和 Word 也以这种方式工作。

于 2013-11-08T16:34:54.683 回答
0

我找到了一个 hack,它有效。我将其发布为任何陷入困境的人的答案,但我不接受答案,因为必须有更好的答案。

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;
            }   
        }
    }
}

这并不完美,因为在您选择并加粗文本后,它会自动取消选择。但是在实践中,我发现这对我来说实际上很好用。尽管如此,它还是感觉像一个黑客,因为它一个黑客

于 2013-11-08T17:05:12.667 回答