【发布时间】:2014-03-31 15:50:07
【问题描述】:
我正在尝试解决当 AllowTab 属性设置为 false 时如何将制表符插入 WPF RichTextBox。
有没有快捷键可以做到这一点?我宁愿不必求助于在工具栏上添加一个特殊按钮或告诉用户他们必须复制并粘贴一个...
【问题讨论】:
标签: wpf richtextbox tabbing
我正在尝试解决当 AllowTab 属性设置为 false 时如何将制表符插入 WPF RichTextBox。
有没有快捷键可以做到这一点?我宁愿不必求助于在工具栏上添加一个特殊按钮或告诉用户他们必须复制并粘贴一个...
【问题讨论】:
标签: wpf richtextbox tabbing
好的,到目前为止我能想到的最好的方法是在后面的代码中拦截 keydown 事件:
private void RichTextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key != Key.Tab ||
(Keyboard.Modifiers & ModifierKeys.Control) != ModifierKeys.Control)
return;
var richTextBox = sender as RichTextBox;
if (richTextBox == null) return;
if (richTextBox.Selection.Text != string.Empty)
richTextBox.Selection.Text = string.Empty;
var caretPosition = richTextBox.CaretPosition.GetPositionAtOffset(0,
LogicalDirection.Forward);
richTextBox.CaretPosition.InsertTextInRun("\t");
richTextBox.CaretPosition = caretPosition;
e.Handled = true;
}
【讨论】:
下面的代码对我有用。
private void RichTextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key != Key.Tab) return;
var richTextBox = sender as RichTextBox;
if (richTextBox == null) return;
if (richTextBox.Selection.Text != string.Empty)
richTextBox.Selection.Text = string.Empty;
var caretPosition = richTextBox.CaretPosition.GetPositionAtOffset(0,
LogicalDirection.Forward);
richTextBox.CaretPosition.InsertTextInRun(" ");
richTextBox.CaretPosition = caretPosition;
e.Handled = true;
}
【讨论】: