WPF文本框全选,并显示尖在同一时间(WPF TextBox selectall and show

2019-10-20 16:29发布

在网上经过长时间的搜寻后,我希望你能帮助我。

我的问题:我想选择一个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

感谢您的帮助:-)

Answer 1:

问题是在强大的内部连接TextBox之间CaretIndexSelection

只要您修改与选择Select()SelectAll()TextBox自动将CaretIndex在选择的开始。 反之,在TextBox清除,当你手动修改的选择CaretIndex 。 你可以让这种行为可见,如果你注册SelectionChangedTextBox和输出电流CaretIndexConsole

这是一个很好的理由,因为在Okuma.Scott他的评论已经提到。

所以,如果真的需要你想要的行为,你可能需要实现自己的CustomTextBox。



Answer 2:

这为我工作:

        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();
            }
        };


文章来源: WPF TextBox selectall and show caret at the same time