1

在网上搜索了很久,希望你能帮助我。

我的问题:我想在 TextBox 中选择完整的文本,并在最后一个字符之后显示插入符号(闪烁的光标)。

我总是找到有关一个问题的信息或隐藏插入符号的信息。

单独的东西没有问题,但它的组合不起作用。

// Set the focus to the TextBox
myTextBox.Focus();

// Select the complete text, but hide the caret (blinking cursor) 
myTextBox.SelectAll();

// or
// myTextBox.Select(0, myTextBox.Text.Length);

// Set the caret after the last character, but loss the selection from the text
myTextBox.CaretIndex = myTextBox.Text.Length;

所以,我在最后一个字符后看到插入符号,但没有选择文本

myTextBox.Focus();
myTextBox.SelectAll();
myTextBox.CaretIndex = myTextBox.Text.Length;

因此,文本被选中,但没有显示插入符号。

myTextBox.Focus();
myTextBox.CaretIndex = myTextBox.Text.Length;
myTextBox.SelectAll();

这就是问题所在:其中一个停用另一个,但我同时需要这两件事

我使用 WPF 和 .Net 4.0

感谢您的帮助:-)

4

2 回答 2

0

TextBox问题在于两者之间CaretIndex的强大内部联系Selection

每当您使用Select()或修改选择时SelectAll(),会TextBox自动将 放置CaretIndex在选择的开头。相反,TextBox当您手动修改CaretIndex. 如果您SelectionChanged在 中注册TextBox并将当前输出到CaretIndex,则可以使此行为可见Console

这是有充分理由的,正如 Okuma.Scott 在他的评论中已经提到的那样。

因此,如果确实需要您想要的行为,您可能需要实现自己的 CustomTextBox。

于 2014-08-12T12:27:47.523 回答
-1

这对我有用:

        TextBox.Text = _Text;
        System.Windows.Input.Keyboard.Focus(TextBox);

        TextBox.GotFocus += (sender, e) => {
            if (_selectAll)
            {
                //I think Caret can be set here but I didn't try it
                TextBox.SelectAll();
            }
        };
于 2014-11-17T16:24:02.190 回答