Question

J'ai utilisé le modèle suivant dans mon projet:

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

J'ai utilisé ce modèle pour créer une matrice modifiable pour l'utilisateur. L'utilisateur peut naviguer d'une cellule à l'autre dans la matrice et j'aimerais mettre en surbrillance les données dans la zone de texte sélectionnée, mais cela ne fonctionne pas. J'ai appelé TextBox.Focus () et TextBox.SelectAll () pour obtenir l'effet, mais rien. La mise au point () fonctionne, mais le texte n'est jamais mis en surbrillance.

Toute aide est la bienvenue et appréciée.

Était-ce utile?

La solution

D'accord, si cela vous intéresse, la solution à mon problème consiste à inclure l'instruction e.Handled = true; dans la méthode du gestionnaire d'événements, où textBox.SelectAll () et textBox.Focus () sont appelés.

Le problème était que j'ai attaché un gestionnaire d'événements à l'événement PreviewKeyDown de la zone de texte qui gère un événement de tunneling et probablement les éléments SelectAll () et Focus () < Les appels / code> sont ignorés sans l'appel de l'instruction e.Handled = true; .

J'espère que ça va aider quelqu'un.

Autres conseils

Sans le reste de votre code, il est difficile de dire si cela fonctionnera pour vous, mais j’ai rassemblé un petit échantillon en utilisant votre DataTemplate (moins les parties qui font référence à du code qui n’a pas été publié).

J'ai pu sélectionner tout le texte dans les zones de texte en ajoutant un gestionnaire d'événements GotFocus à la zone de texte dans le DataTemplate:

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

Et le code-behind:

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

Faites-moi savoir si vous essayez de tout sélectionner dans des circonstances différentes (pas lorsque la case reçoit la mise au point).

Voici une très bonne solution très simple (je ne sais pas si cela fonctionne pour votre modèle, mais essayez-le): http://social.msdn.microsoft.com/forums/en-US/wpf/thread/564b5731-af8a-49bf -b297-6d179615819f

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top