Как включить вкладки как символы в Silverlight RichTextControl? - PullRequest
1 голос
/ 30 декабря 2011

Я посмотрел онлайн, и кажется, что вкладки поддерживаются в виде символов, но когда я нажимаю клавишу Tab, ничего не происходит.RichTextBox - единственный элемент управления в моем приложении, поэтому я не хочу иметь Tab для изменения фокуса, но для вставки символов табуляции в редактор.

Есть ли свойство, которое мне нужно установить, чтобы включитьэто?

Ответы [ 3 ]

2 голосов
/ 30 декабря 2011

Насколько я понимаю, в настоящее время для этого нет встроенных функций, но вы можете сделать это самостоятельно:

private void RichTextBox_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Tab)
    {
        RichTextBox richTextBox = (RichTextBox) sender;
        richTextBox.Selection.Select(richTextBox.ContentEnd, richTextBox.ContentEnd);
        Run tab = new Run() {Text = "\t"};
        richTextBox.Selection.Insert(tab);
    }
}

К сожалению, весь этот беспорядок необходимо для эмуляции свойства AcceptsTab, предоставленного в WPF.Приведенная выше техническая задача устанавливает выделение в конец содержимого RichTextBox, а затем вставляет новый Run (встроенный текстовый элемент) в эту позицию.

Я проверил его в браузере, и он должен работатьдля тебя тоже.Дайте мне знать, если осталось что-то прояснить.

1 голос
/ 13 января 2012

Вот мое решение.Поддержка SHIFT + TAB, а также.

private void txtText_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
    if (e.Key == System.Windows.Input.Key.Tab)
    {
        e.Handled = true;
        if ((System.Windows.Input.Keyboard.Modifiers & System.Windows.Input.ModifierKeys.Shift) != 0)
        {
            var startSel = txtText.Selection.Start;
            var endSel = txtText.Selection.End;

            var backwardPosition = txtText.Selection.Start.GetNextInsertionPosition(LogicalDirection.Backward);
            if (backwardPosition != null)
            {
                txtText.Selection.Select(backwardPosition, txtText.Selection.Start);
                var c = txtText.Selection.Text;
                if (c.Equals("\t"))
                {
                    txtText.Selection.Select(backwardPosition, endSel);
                    txtText.Selection.Text = "";
                }
                else
                {
                    txtText.Selection.Select(startSel, endSel);
                }
            }
        }
        else
        {
            txtText.Selection.Insert(new Run() { Text = "\t" });
        }
    }
}
1 голос
/ 30 декабря 2011

Я сейчас не знаю прямого пути, но вы всегда можете сделать

  private void RichTextBox_KeyDown(object sender, KeyEventArgs e)
        {
            if(e.Key == Key.Tab)
                rich.AppendText("    ");
        }
...