ich eine WPF-Steuerelement haben wie folgt definiert:WPF: Der Übergang von einer Zelle zur nächsten, wenn sie in einem Items Drücken der Eingabetaste
<ItemsControl ItemsSource="{Binding DutyValueBinders}" IsEnabled="{Binding Enabled}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Value, TargetNullValue=''}" Width="50"></TextBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Dies erzeugt ein Gitter, wie folgt aussehen:
Obwohl im XAML nur ein Textfeld definiert ist, sieht der Benutzer ein Raster.
Was ich tun möchte, ist, nachdem der Benutzer einen Wert eingegeben und Enter oder Return gedrückt hat, sollte der Fokus an die nächste Zelle weitergeleitet werden usw., bis das Ende des Rasters erreicht ist. Ich habe versucht, diese Routine in den hinter Code setzen (von einem anderen Thread auf Stackoverflow kopiert):
private void UserControl_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key != Key.Enter || (!e.IsToggled && sender is Button)) return;
var request = new TraversalRequest(FocusNavigationDirection.Next);
var keyboardFocus = Keyboard.FocusedElement as UIElement;
if (keyboardFocus == null) return;
keyboardFocus.MoveFocus(request);
e.Handled = true;
}
und den Header der XAML wie folgt geändert:
<UserControl ...
(Other references)
...
d:DesignHeight="300" d:DesignWidth="300" PreviewKeyDown="UserControl_PreviewKeyDown">
Das Problem ist, da es nur ist eine Textbox in der XAML-Definition, es gibt keine Tabindex-Reihenfolge für sie zu folgen, und wenn Sie also die Eingabetaste drücken, verschwindet der Cursor einfach.
Gibt es eine Möglichkeit, dies zu tun, kurz, den XAML vollständig zu verwerfen und wieder mit einer anderen Art von Steuerelement zu beginnen?
Ich verstehe nicht, wie das 'ItemsControl' mehrere Zeilen produzieren kann. – Maxim