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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top