C# 选择文本框WPF中的所有文本

C# 选择文本框WPF中的所有文本,c#,wpf,events,textbox,C#,Wpf,Events,Textbox,我不知道为什么我的代码不起作用。 我想,当一个文本框被点击时,选择里面的所有文本来整体编辑它 我的代码: private void XValue_PreviewMouseDown(object sender, MouseButtonEventArgs e) { ((TextBox)sender).SelectAll(); } XAML代码: <TextBox x:Name="XValue" Text="{Binding XInitValue, StringFormat={}{0:

我不知道为什么我的代码不起作用。 我想,当一个文本框被点击时,选择里面的所有文本来整体编辑它

我的代码:

private void XValue_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    ((TextBox)sender).SelectAll();
}
XAML代码:

<TextBox x:Name="XValue" Text="{Binding XInitValue, StringFormat={}{0:#,0.0000}}" Width="80" VerticalAlignment="Center" PreviewMouseDown="XValue_PreviewMouseDown" ></TextBox>


事件发生,但未选择文本

您可以处理
GotKeyboardFocus
事件并使用dispatcher:

private void XValue_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    var textBox = ((TextBox)sender);
    textBox.Dispatcher.BeginInvoke(new Action(() =>
    {
        textBox.SelectAll();
    }));
}

PreviewMouseDown
事件。关键是使用dispatcher。

我试过,发现它只有在设置了数据上下文之后才能工作

问题在于触发事件后控件如何聚焦。您需要编写
e.Handled=true,防止焦点冒泡

private void XValue_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    ((TextBox)sender).SelectAll();
    e.Handled = true;
}

看看你可以使用@KrzysztofBracha在他的评论中提出的解决方案之一,或者如果你只想在鼠标点击时选择文本,而不想在焦点上选择文本,请使用PreviewMouseUp代替PreviewMouseDown。这是否回答了你的问题?你其实不需要这些。只要确保你调用e.Handled=true;毕竟,有人能详细解释一下为什么这被否决了吗?这是问题的实际解决方案。我必须添加((文本框)sender.Focus();在选择“全部”之前,让这项工作变得有趣。@Frederik。