Maison > développement back-end > C++ > Comment puis-je définir par programme le focus sur une zone de texte dans WPF à partir du ViewModel ?

Comment puis-je définir par programme le focus sur une zone de texte dans WPF à partir du ViewModel ?

Linda Hamilton
Libérer: 2025-01-26 01:56:12
original
492 Les gens l'ont consulté

How Can I Programmatically Set Focus to a TextBox in WPF from the ViewModel?

Dans le WPF, définissez la foyer de TextBox via ViewModel

Lorsque vous avez cliqué par le bouton dans la vue WPF, vous devrez peut-être afficher un message d'erreur, puis transférer la mise au point vers un contrôle spécifique de la zone de texte. Cependant, l'exécution du code suivant dans ViewModel ne peut pas définir le curseur sur la zone de texte requise:

La raison de ce problème est de citer l'élément d'interface utilisateur directement dans ViewModel, ce qui est une pratique courante. Pour résoudre ce problème, nous devons utiliser d'autres technologies.
<code class="language-csharp">if (companyref == null)
{
    var cs = new Lipper.Nelson.AdminClient.Main.Views.ContactPanels.CompanyAssociation(); 

    MessageBox.Show("Company does not exist.", "Error", MessageBoxButton.OK,
                    MessageBoxImage.Exclamation);

    cs.txtCompanyID.Focusable = true;

    System.Windows.Input.Keyboard.Focus(cs.txtCompanyID);
}</code>
Copier après la connexion

Utilisez des attributs supplémentaires

Une méthode consiste à créer un attribut supplémentaire qui peut être appliqué à n'importe quel uielement et le lie à l'attribut ViewModel, tel que "isfocus". Lorsque la valeur de cet attribut change, il peut définir le foyer de l'élément pour nous permettre de le lier à l'état du ViewModel. L'implémentation de cet attribut supplémentaire peut être présentée ci-dessous:

Ensuite, les attributs qui peuvent être transformés dans le ViewModel dans XAML peuvent être utilisés pour définir l'attention par la programmation.

<code class="language-csharp">public static class FocusExtension
{
    public static bool GetIsFocused(DependencyObject obj)
    {
        return (bool)obj.GetValue(IsFocusedProperty);
    }

    public static void SetIsFocused(DependencyObject obj, bool value)
    {
        obj.SetValue(IsFocusedProperty, value);
    }

    public static readonly DependencyProperty IsFocusedProperty =
        DependencyProperty.RegisterAttached(
            "IsFocused", typeof(bool), typeof(FocusExtension),
            new UIPropertyMetadata(false, OnIsFocusedPropertyChanged));

    private static void OnIsFocusedPropertyChanged(
        DependencyObject d, 
        DependencyPropertyChangedEventArgs e)
    {
        var uie = (UIElement)d;
        if ((bool)e.NewValue)
        {
            uie.Focus(); // 忽略 false 值。
        }
    }
}</code>
Copier après la connexion
<.> Utilisez le code source .NET pour déboguer

Pour des problèmes de mise au point complexes, en utilisant le code source .NET pour déboguer pour comprendre comment le traitement du framework peut aider. Cela peut fournir des informations précieuses et aider à découvrir tous les problèmes. alternative

Une autre méthode de définition de la foyer de TextBox à partir de ViewModel est d'utiliser des commandes pour effectuer des comportements. Ce comportement peut être implémenté dans la vue ou ViewModel, et peut être incliné sur le bouton pour cliquer. Ensuite, le comportement peut être défini pour définir l'attention sur la zone de texte requise.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal