捕获Silverlight TextBox中的选项卡

时间:2009-04-02 03:50:29

标签: silverlight textbox tabs

如何捕获在Silverlight TextBox中输入的标签并在其中呈现4个空格(或标签)?

我无法弄清楚如何阻止标签导航。

3 个答案:

答案 0 :(得分:8)

这是我做的(类似于约翰内斯的代码):

        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的值是四个空格。

答案 1 :(得分: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中的最后一行将编辑光标设置为文本的末尾,否则,当它获得焦点时,光标位置位于文本框的开头

答案 2 :(得分:1)