7

如何捕获在 Silverlight 文本框中输入的选项卡并在其位置呈现 4 个空格(或选项卡)?

我不知道如何阻止标签导航。

4

3 回答 3

8

这是我所做的(类似于 Johannes 的代码):

        private const string Tab = "    ";
    void textBox_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Tab)
        {
            int selectionStart = textBox.SelectionStart;
            textBox.Text = String.Format("{0}{1}{2}", 
                textBox.Text.Substring(0, textBox.SelectionStart),
                Tab,
                textBox.Text.Substring(textBox.SelectionStart + textBox.SelectionLength, (textBox.Text.Length) - (textBox.SelectionStart + textBox.SelectionLength))
                );
            e.Handled = true;
            textBox.SelectionStart = selectionStart + Tab.Length;
        }
    }

即使您选择了一些文本并点击了“Tab”键,这也符合您的预期。

还有一件事:我尝试将制表符字符串设为“\t”,但无济于事。呈现的选项卡,但是是单个空格的宽度 - 因此 Tab const 的值是四个空格。

于 2009-05-08T00:13:57.023 回答
1

我不知道如何解决您的问题,尽管这似乎可行,但我还是拼凑了一个解决方案。

如下设置 KeyDown 事件。

expenses.KeyDown += new KeyEventHandler(expenses_KeyDown);

在那种情况下,我输入了以下代码:

void expenses_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Tab)
            {
                expenses.Text += "    ";
                expenses.Focus();
                expenses.LostFocus += new RoutedEventHandler(expenses_LostFocus);
            }
        }

然后在 LostFocus 中:

void expenses_LostFocus(object sender, RoutedEventArgs e)
        {
            expenses.Focus();
            expenses.Select(expenses.Text.Length - 1, 0);
        }

LostFocus 的最后一行将编辑光标设置在文本的末尾,否则,当它获得焦点时,光标位置在文本框的开头

于 2009-05-06T09:23:16.720 回答
1

这对我来说似乎很有效,并且不需要第二个事件处理程序或文本框名称的硬编码:

void TabbableTextBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Tab)
            {
                e.Handled = true;

                var tb = ((TextBox)sender);
                tb.Text += "\t";
                tb.Select(tb.Text.Length, 0);
            }
        }
于 2010-07-23T22:08:10.250 回答