WPF TextBox selectall and show caret at the same time

和自甴很熟 提交于 2020-01-05 19:17:52

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!