我不知道我的标题是否正确。
我在这里做的是当用户按下 ENTER 键时导航到下一个控件。
我的控件是动态创建的。
这是我的代码:
<ItemsControl IsTabStop="False" ItemsSource="{Binding ListControls}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Grid.Column="0">
<dxmvvm:Interaction.Behaviors>
<ee:TabOnEnterBehavior/>
</dxmvvm:Interaction.Behaviors>
</TextBox>
<TextBox Grid.Column="1">
<dxmvvm:Interaction.Behaviors>
<ee:TabOnEnterBehavior/>
</dxmvvm:Interaction.Behaviors>
</TextBox>
<TextBox Grid.Column="2">
<dxmvvm:Interaction.Behaviors>
<ee:TabOnEnterBehavior/>
</dxmvvm:Interaction.Behaviors>
</TextBox>
<TextBox Grid.Column="3">
<dxmvvm:Interaction.Behaviors>
<ee:TabOnEnterBehavior/>
</dxmvvm:Interaction.Behaviors>
</TextBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
这是我的TabOnEnterBehavior课程,我想传递 ListControls 以检查用户是否ENTER按下last control
public class TabOnEnterBehavior : Behavior<System.Windows.Controls.TextBox>
{
protected override void OnAttached()
{
AssociatedObject.PreviewKeyDown += AssociatedObject_PreviewKeyDown;
}
private void AssociatedObject_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
var request = new TraversalRequest(FocusNavigationDirection.Down);
request.Wrapped = true;
AssociatedObject.MoveFocus(request);
}
}
protected override void OnDetaching()
{
AssociatedObject.PreviewKeyDown -= AssociatedObject_PreviewKeyDown;
}
}
加载项目后,它是这样的:

当用户按下ENTER键盘上的键时,焦点转到它下面的文本框:

现在,我想要的是当焦点位于最后一个文本框时用户按下 Enter 键,如下所示:

然后我希望焦点转到下一个文本框,如下所示:

但我不能让它工作。我该怎么做?
所以我正在考虑访问列表以检查是否FOCUS已经在最后一个控件中。TabOnEnterBehavior但是如何在不破坏 MVVM 模式的情况下将列表传递给我的班级?
编辑:
我也尝试过,KeyboardNavigation.TabIndex="3"但我的问题是它可以使用选项卡触发。我的要求是ENTER关键。有可能改变它吗?