fest Wenn Sie in der WPF -Ansicht auf die Schaltfläche geklickt haben, müssen Sie möglicherweise eine Fehlermeldung anzeigen und dann den Fokus auf ein bestimmtes Textbox -Steuerelement übertragen. Durch die Ausführung des folgenden Codes in ViewModel kann der Cursor jedoch nicht auf das erforderliche Textfeld festgelegt werden:
Der Grund für dieses Problem besteht darin, das UI -Element direkt in ViewModel zu zitieren, was eine gängige Praxis ist. Um dieses Problem zu lösen, müssen wir andere Technologien verwenden.
<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>
Verwenden Sie zusätzliche Attribute
Eine Methode besteht darin, ein zusätzliches Attribut zu erstellen, das auf jede Uielement angewendet werden kann und es an das ViewModel -Attribut wie "isFocused" bindet. Wenn sich der Wert dieses Attributs ändert, kann es den Fokus des Elements festlegen, damit wir es an den Status des ViewModel binden können. Die Implementierung dieses zusätzlichen Attributs kann unten angezeigt werden:
Dann können die Attribute, die in das ViewModel in XAML eingebunden werden können, verwendet werden, um den Fokus durch Programmierung zu setzen.
<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>
zu debuggen
Für komplexe Fokusprobleme verwenden Sie den .NET -Quellcode zum Debuggen, um zu verstehen, wie die Framework -Verarbeitung der Fokus helfen kann. Dies kann wertvolle Erkenntnisse liefern und dazu beitragen, Probleme zu finden. Alternativ
Eine weitere Methode zum Festlegen des Fokus von Textbox aus ViewModel besteht darin, Befehle zur Durchführung von Verhaltensweisen zu verwenden. Dieses Verhalten kann in Ansicht oder ViewModel implementiert werden und für die Schaltfläche zum Klicken gebeten werden. Anschließend kann das Verhalten so eingestellt werden, dass der Fokus auf das erforderliche Textfeld festgelegt wird.
Das obige ist der detaillierte Inhalt vonWie kann ich vom ViewModel aus programmgesteuert den Fokus auf eine TextBox in WPF setzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!