问题
after a long search on the net, I hope you can help me.
My Problem: I want to select the complete text in a TextBox and will show the caret (blinking cursor) after the last character.
Always I have found information about one problem or information to hide the caret.
The separate things are no problems but the combination of it don't work.
// 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;
So, I see the caret after the last character, but the text is not selected
myTextBox.Focus();
myTextBox.SelectAll();
myTextBox.CaretIndex = myTextBox.Text.Length;
And so, the text is selected, but no caret is shown.
myTextBox.Focus();
myTextBox.CaretIndex = myTextBox.Text.Length;
myTextBox.SelectAll();
And that's the problem: one of them deactivate the another one, but I need these two things at the same time
I using WPF and .Net 4.0
Thanks for helping :-)
回答1:
The problem is the strong internal connection in the TextBox
between CaretIndex
and the Selection
.
Whenever you modify the selection with Select()
or SelectAll()
, the TextBox
automatically places the CaretIndex
at the beginning of the selection. In reverse, the TextBox
clears the selection when you manually modify the CaretIndex
. You can make this behavior visible, if you register for SelectionChanged
in the TextBox
and output the current CaretIndex
to Console
.
This is for a good reason, as Okuma.Scott already mentioned in his comment.
So if your desired behaviour is really required, you probably need to implement your own CustomTextBox.
回答2:
This worked for me:
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();
}
};
来源:https://stackoverflow.com/questions/25263548/wpf-textbox-selectall-and-show-caret-at-the-same-time