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>
Réponse :
Il y a plusieurs problèmes possibles à considérer :
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.
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.
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>
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>
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!