【问题标题】:WPF, RichTextBox problem in getting the right textproperties at cursor positionWPF,RichTextBox问题在光标位置获取正确的文本属性
【发布时间】:2011-01-25 20:15:03
【问题描述】:

我正在使用 wpf Richtextbox 构建一个简单的编辑器。此编辑器具有某种用于粗体、斜体、下划线等的切换按钮,当所选文本或光标处的文本具有相应属性时,这些按钮会被“按下”。我是这样做的:

private TextRange GetSelectedTextRange() {
  if(_richTextBox == null) return null;
  return new TextRange(_richTextBox.Selection.Start, _richTextBox.Selection.End);
}

private void UpdateIsItalic() {
  TextRange selectedTextRange = GetSelectedTextRange();
  if(selectedTextRange == null) {
    IsItalic = false;
    return;
  }
  object fontStyleObject = selectedTextRange.GetPropertyValue(Run.FontStyleProperty);
  if(fontStyleObject is FontStyle) {
    FontStyle fontStyle = (FontStyle)fontStyleObject;
    IsItalic = (fontStyle == FontStyles.Italic || fontStyle == FontStyles.Oblique);
  } else {
    IsItalic = false;
  }
}

问题是,当光标位于行尾并且发送例如 ToggleItalic 命令到 RichTextBox 时,我从 SelectedTextRange.GetPropertyValue 返回的值对光标后面的文本有效,而不是我将要输入的文本,因此我将返回与命令之前相同的值。但我想要的是,当我发送 ToggleItalic 命令时,结果是当我要输入的字母是斜体时 IsItalic 设置为 true。有没有人知道如何解决这个问题?

非常感谢,

列维

【问题讨论】:

    标签: wpf richtextbox


    【解决方案1】:

    我找到了一个解决方案,我不应该创建一个新的 TextRange 而只是使用 TextSelection,简而言之是这样的:

    object fontStyleObject = _richTextBox.Selection.GetPropertyValue(Run.FontStyleProperty);
    

    【讨论】:

      猜你喜欢
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-23
      • 1970-01-01
      相关资源
      最近更新 更多