So legen Sie den Fokus auf ein TextBox
Element in WPF fest
Ich habe diesen Code:
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
... aber es funktioniert nicht.
Irgendeine Idee?
So legen Sie den Fokus auf ein TextBox
Element in WPF fest
Ich habe diesen Code:
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
... aber es funktioniert nicht.
Irgendeine Idee?
Antworten:
In XAML:
<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}">
<TextBox Name="Box" />
</StackPanel>
Bisher hat niemand erklärt, warum der Code in der Frage nicht funktioniert. Ich vermute, dass der Code im Konstruktor des Fensters platziert wurde. Zu diesem Zeitpunkt ist es jedoch noch zu früh, um den Fokus festzulegen. Dies muss erfolgen, sobald das Fenster für die Interaktion bereit ist. Der beste Ort für den Code ist das Loaded-Ereignis:
public KonsoleWindow() {
public TestWindow() {
InitializeComponent();
Loaded += TestWindow_Loaded;
}
private void TestWindow_Loaded(object sender, RoutedEventArgs e) {
txtCompanyID.Focus();
}
}
Focus()
txtCompanyId.Focus(FocusState.Keyboard)
Versuchen Sie es mit FocusManager.SetFocusedElement
FocusManager.SetFocusedElement(parentElement, txtCompanyID)
txtCompanyID.Focusable = true;
Keyboard.Focus(txtCompanyID);
msdn:
Auf dem gesamten Desktop kann nur ein Element mit Tastaturfokus vorhanden sein. In WPF wird für das Element mit Tastaturfokus IsKeyboardFocused auf true gesetzt.
Sie können nach der Einstellungszeile brechen und den Wert der IsKeyboardFocused
Eigenschaft überprüfen . Überprüfen Sie auch, ob Sie diese Linie wirklich erreichen, oder stellen Sie ein anderes Element ein, um danach den Fokus zu erhalten.
Versuche dies : MyTextBox.Focus ( );
Nichts davon funktionierte für mich, da ich eher ein Raster als ein StackPanel verwendete.
Ich habe endlich dieses Beispiel gefunden: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/
und modifizierte es zu diesem:
Im Abschnitt "Ressourcen":
<Style x:Key="FocusTextBox" TargetType="Grid">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=textBoxName, Path=IsVisible}" Value="True">
<Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=textBoxName}"/>
</DataTrigger>
</Style.Triggers>
</Style>
In meiner Gitterdefinition:
<Grid Style="{StaticResource FocusTextBox}" />
Falls Sie bei den anderen Antworten keine Lösung gefunden haben, habe ich das Problem auf diese Weise gelöst.
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
TEXTBOX_OBJECT.Focus();
}), System.Windows.Threading.DispatcherPriority.Render);
Soweit ich weiß, funktionieren die anderen Lösungen möglicherweise nicht, da der Aufruf von Focus()
aufgerufen wird, bevor die Anwendung die anderen Komponenten gerendert hat.
Eine andere mögliche Lösung ist die Verwendung von FocusBehavior, das vom kostenlosen DevExpress MVVM Framework bereitgestellt wird :
<TextBox Text="This control is focused on startup">
<dxmvvm:Interaction.Behaviors>
<dxmvvm:FocusBehavior/>
</dxmvvm:Interaction.Behaviors>
</TextBox>
Sie können ein Steuerelement fokussieren, wenn es geladen wird, wenn ein bestimmtes Ereignis ausgelöst oder eine Eigenschaft geändert wird.