WPF TextBox.SelectAll () não funciona
-
06-07-2019 - |
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.
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