No sé por qué mi código no funciona. Quiero, cuando se hace clic en un cuadro de texto, seleccione todo el texto dentro para editarlo en su totalidad.

Mi código :

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

Código XAML:

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

El evento ocurre, pero el texto no está seleccionado.

1
user7494002 22 jun. 2017 a las 15:27

3 respuestas

La mejor respuesta

Puede manejar el evento GotKeyboardFocus y usar el despachador:

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

O el evento PreviewMouseDown. La clave es usar el despachador.

-2
mm8 22 jun. 2017 a las 12:45

Intenté y descubrí que funciona solo después de establecer el contexto de datos.

-3
Aansari 22 jun. 2017 a las 12:43

El problema es cómo se enfoca el control después de que se dispara el evento. Debe escribir e.Handled = true;, lo que evita que el foco burbujee.

private void XValue_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    ((TextBox)sender).SelectAll();
    e.Handled = true;
}
0
Krythic 26 oct. 2019 a las 17:13