WPF TextBox.SelectAll () no funciona
-
06-07-2019 - |
Pregunta
He utilizado la siguiente plantilla en mi proyecto:
<DataTemplate
x:Key="textBoxDataTemplate">
<TextBox
Name="textBox"
ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"
Tag="{Binding}"
PreviewKeyDown="cellValueTextBoxKeyDown">
<TextBox.Text>
<MultiBinding
Converter="{StaticResource intToStringMultiConverter}">
<Binding
Path="CellValue"
Mode="TwoWay">
<Binding.ValidationRules>
<y:MatrixCellValueRule
MaxValue="200" />
</Binding.ValidationRules>
</Binding>
<Binding
RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type y:MatrixGrid}}"
Path="Tag"
Mode="OneWay" />
</MultiBinding>
</TextBox.Text>
</TextBox>
</DataTemplate>
Utilicé esta plantilla para crear una matriz editable para el usuario. El usuario puede navegar de celda a celda dentro de la matriz y me gustaría resaltar los datos en el cuadro de texto seleccionado, pero no funciona. Llamé a TextBox.Focus () y TextBox.SelectAll () para lograr el efecto pero nada. El Focus () funciona pero el texto nunca se resalta.
Cualquier ayuda es bienvenida y apreciada.
Solución
De acuerdo, si alguien está interesado, la solución a este problema mío fue incluir la declaración e.Handled = true;
en el método del controlador de eventos donde textBox.SelectAll ()
y textBox.Focus ()
se llaman.
El problema fue que adjunté un controlador de eventos al evento PreviewKeyDown
del cuadro de texto que controla un evento de tunelización y probablemente el SelectAll ()
y el Focus () < Las llamadas a / code> se ignoran sin llamar a la declaración
e.Handled = true;
.
Espero que ayude a alguien.
Otros consejos
Sin el resto de su código, es difícil decir si esto funcionará para usted, pero armé una pequeña muestra usando su DataTemplate (menos las partes que se refieren al código que no se publicó).
Pude seleccionar todo el texto en los cuadros de texto agregando un controlador de eventos GotFocus al TextBox en la plantilla de datos:
<TextBox
...
GotFocus="textBox_GotFocus"
...>
...
</TextBox>
Y el código subyacente:
private void textBox_GotFocus(object sender, RoutedEventArgs e)
{
TextBox textBox = sender as TextBox;
if (textBox != null)
{
textBox.SelectAll();
}
}
Avíseme si está intentando seleccionar todo en diferentes circunstancias (no cuando el cuadro recibe el foco).
Aquí hay una muy buena solución muy simple (no sé si funciona para su plantilla, pero inténtelo): http://social.msdn.microsoft.com/forums/en-US/wpf/thread/564b5731-af8a-49bf -b297-6d179615819f