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

如果我SelectAllGotFocus事件处理程序中调用,则无法使用鼠标-释放鼠标后,选择项就会消失。

编辑:人们喜欢唐娜(Donnelle)的答案,我将尽力解释为什么我不喜欢被接受的答案。

  • 它更复杂,而被接受的答案则以更简单的方式完成相同的事情。

  • 接受答案的可用性更好。当您单击文本的中间部分时,释放鼠标时文本将不会被选中,从而使您可以立即开始编辑;如果仍然要选择全部,只需再次按下该按钮,这一次在释放时不会取消选择。按照Donelle的食谱,如果我单击文本中间的内容,则必须第二次单击才能进行编辑。如果我单击文本中的某个地方而不是文本外部的某个地方,这很可能意味着我想开始编辑而不是覆盖所有内容。


智慧大石
浏览 1211回答 3
3回答

犯罪嫌疑人X

不知道为什么它在GotFocus事件中丢失了选择。但是一种解决方案是对GotKeyboardFocus和GotMouseCapture事件进行选择。这样,它将始终有效。

互换的青春

我们拥有它,因此,第一单击将全选,然后单击光标(我们的应用程序设计用于带笔的数位板)。您可能会发现它很有用。public class ClickSelectTextBox : TextBox{    public ClickSelectTextBox()    {        AddHandler(PreviewMouseLeftButtonDownEvent,           new MouseButtonEventHandler(SelectivelyIgnoreMouseButton), true);        AddHandler(GotKeyboardFocusEvent,           new RoutedEventHandler(SelectAllText), true);        AddHandler(MouseDoubleClickEvent,           new RoutedEventHandler(SelectAllText), true);    }    private static void SelectivelyIgnoreMouseButton(object sender,                                                      MouseButtonEventArgs e)    {        // Find the TextBox        DependencyObject parent = e.OriginalSource as UIElement;        while (parent != null && !(parent is TextBox))            parent = VisualTreeHelper.GetParent(parent);        if (parent != null)        {            var textBox = (TextBox)parent;            if (!textBox.IsKeyboardFocusWithin)            {                // If the text box is not yet focussed, give it the focus and                // stop further processing of this click event.                textBox.Focus();                e.Handled = true;            }        }    }    private static void SelectAllText(object sender, RoutedEventArgs e)    {        var textBox = e.OriginalSource as TextBox;        if (textBox != null)            textBox.SelectAll();    }}

元芳怎么了

Donnelle的答案效果最好,但是必须派出一个新的班级来使用它很痛苦。我没有在App.xaml.cs中为应用程序中的所有TextBox注册处理程序。这使我可以将Donnelle的答案与标准TextBox控件一起使用。将以下方法添加到您的App.xaml.cs中:public partial class App : Application{    protected override void OnStartup(StartupEventArgs e)     {        // Select the text in a TextBox when it receives focus.        EventManager.RegisterClassHandler(typeof(TextBox), TextBox.PreviewMouseLeftButtonDownEvent,            new MouseButtonEventHandler(SelectivelyIgnoreMouseButton));        EventManager.RegisterClassHandler(typeof(TextBox), TextBox.GotKeyboardFocusEvent,             new RoutedEventHandler(SelectAllText));        EventManager.RegisterClassHandler(typeof(TextBox), TextBox.MouseDoubleClickEvent,            new RoutedEventHandler(SelectAllText));        base.OnStartup(e);     }    void SelectivelyIgnoreMouseButton(object sender, MouseButtonEventArgs e)    {        // Find the TextBox        DependencyObject parent = e.OriginalSource as UIElement;        while (parent != null && !(parent is TextBox))            parent = VisualTreeHelper.GetParent(parent);        if (parent != null)        {            var textBox = (TextBox)parent;            if (!textBox.IsKeyboardFocusWithin)            {                // If the text box is not yet focused, give it the focus and                // stop further processing of this click event.                textBox.Focus();                e.Handled = true;            }        }    }    void SelectAllText(object sender, RoutedEventArgs e)    {        var textBox = e.OriginalSource as TextBox;        if (textBox != null)            textBox.SelectAll();    }}
打开App,查看更多内容
随时随地看视频慕课网APP