小编典典

如何在 WPF TextBox 中自动选择焦点上的所有文本?

all

如果我SelectAllGotFocus事件处理程序中调用,它不适用于鼠标 - 一旦释放鼠标,选择就会消失。

编辑:人们喜欢 Donnelle 的回答,我将尝试解释为什么我不像接受的答案那样喜欢它。

  • 它更复杂,而接受的答案以更简单的方式做同样的事情。
  • 接受答案的可用性更好。当您单击文本中间时,当您松开鼠标时,文本会被取消选择,让您可以立即开始编辑,如果您仍然想全选,只需再次按下按钮,这一次它不会在释放时取消选择。按照 Donelle 的食谱,如果我单击文本中间,我必须再次单击才能进行编辑。如果我单击文本内的某个位置而不是文本的外部,这很可能意味着我想开始编辑而不是覆盖所有内容。

阅读 97

收藏
2022-05-23

共1个答案

小编典典

不知道为什么它在GotFocus事件中失去了选择。

但一种解决方案是对事件进行GotKeyboardFocus选择GotMouseCapture。这样它就会一直工作。

- 编辑 -

在此处添加一个示例,向人们展示如何解决上述一些缺点:

private void TextBox_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    // Fixes issue when clicking cut/copy/paste in context menu
    if (textBox.SelectionLength == 0) 
        textBox.SelectAll();
}

private void TextBox_LostMouseCapture(object sender, MouseEventArgs e)
{
    // If user highlights some text, don't override it
    if (textBox.SelectionLength == 0) 
        textBox.SelectAll();

    // further clicks will not select all
    textBox.LostMouseCapture -= TextBox_LostMouseCapture; 
}

private void TextBox_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    // once we've left the TextBox, return the select all behavior
    textBox.LostMouseCapture += TextBox_LostMouseCapture;
}
2022-05-23