Maison > développement back-end > C++ > Comment définir Focus sur une zone de texte WPF à partir du modèle de vue?

Comment définir Focus sur une zone de texte WPF à partir du modèle de vue?

DDD
Libérer: 2025-01-26 01:51:08
original
797 Les gens l'ont consulté

How to Set Focus to a WPF TextBox from the View Model?

Définir le focus TextBox à partir du modèle de vue dans WPF

Question :

J'ai du mal à essayer de définir le focus d'un contrôle TextBox à partir du modèle d'affichage de mon application WPF. Je dois afficher un message à l'utilisateur après un clic sur un bouton, puis définir le curseur sur le contrôle TextBox, mais le curseur n'est pas défini. Voici le code correspondant :

<code class="language-c#">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

Réponse :

Il y a plusieurs problèmes possibles à considérer :

  1. Référencer l'interface utilisateur dans le modèle de vue : En règle générale, il n'est pas recommandé de référencer les éléments de l'interface utilisateur directement dans le modèle de vue. Envisagez plutôt d'utiliser d'autres méthodes telles que les propriétés attachées ou la liaison de données.

  2. Débogage du code source .NET : Pour résoudre les problèmes de focus, il est utile d’activer le débogage du code source .NET. Cela vous permet de parcourir votre code et d'identifier exactement où le focus n'est pas défini correctement.

  3. Solution d'attribut supplémentaire : Un moyen simple consiste à utiliser les propriétés attachées pour suivre et définir le focus à partir du modèle de vue. Voici un exemple :

<code class="language-c#">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

Vous pouvez ensuite lier cette propriété à votre modèle de vue dans votre vue :

<code class="language-xml"><TextBox local:FocusExtension.IsFocused="{Binding IsUserNameFocused}"></TextBox></code>
Copier après la connexion

Cette réponse révisée conserve l'image et la mise en forme d'origine tout en reformulant le texte pour une clarté et une fluidité améliorées. Les exemples de code sont inchangés.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal