Pergunta

Eu tenho usado o modelo a seguir no meu projeto:

<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>

Eu usei esse modelo para criar uma matriz editável para o usuário. O usuário é capaz de navegar de célula para célula dentro da matriz e eu gostaria de destacar os dados na caixa de texto selecionado, mas ele não funciona. Liguei TextBox.Focus () e TextBox.SelectAll () para obter o efeito mas nada. O Focus () funciona, mas o texto nunca fica realçado.

Qualquer ajuda é bem-vinda e apreciada.

Foi útil?

Solução

Ok, se alguém estiver interessado, a solução para este problema da mina era para incluir a e.Handled = true; declaração no método manipulador de eventos onde o textBox.SelectAll() e textBox.Focus() são chamados.

O problema era que eu anexado um manipulador de evento para evento PreviewKeyDown da caixa de texto que trata de um evento de tunelamento e, provavelmente, as chamadas SelectAll() e Focus() são ignoradas sem chamar a declaração e.Handled = true;.

Hope ele vai ajudar alguém.

Outras dicas

Sem o resto do seu código é difícil dizer se isso vai funcionar para você, mas eu coloquei uma pequena amostra usando seu DataTemplate (menos as partes que se referem ao código que não foi publicada).

Eu era capaz de selecionar todo o texto nas caixas de texto, adicionando um manipulador de eventos GotFocus do TextBox no DataTemplate:

<TextBox 
    ...
    GotFocus="textBox_GotFocus"
    ...>
...
</TextBox>

E o code-behind:

    private void textBox_GotFocus(object sender, RoutedEventArgs e)
    {
        TextBox textBox = sender as TextBox;
        if (textBox != null)
        {
            textBox.SelectAll();
        }
    }

Deixe-me saber se você está tentando selecionar todos em circunstâncias diferentes (não quando a caixa recebe o foco).

Aqui está uma solução muito boa muito simples (não sei se ele funciona para o seu modelo, mas dar-lhe uma tentativa): http://social.msdn.microsoft.com/forums/en-US/wpf/thread/564b5731-af8a-49bf -b297-6d179615819f

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top