我不知道我的头衔是否正确。
我在这里做的是当用户按下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键时,如下所示:
然后我希望焦点转到下一个文本框:
但我无法使其发挥作用。我该怎么办?
所以我想访问List以检查FOCUS
是否已经在最后一个控件中。但是如何在不破坏MVVM模式的情况下将List传递给我的TabOnEnterBehavior
类?
编辑:
我也试过了KeyboardNavigation.TabIndex="3"
,但我的问题是它可以使用标签触发。我的要求是ENTER
密钥。是否有可能改变它?
答案 0 :(得分:1)
我强烈反对你不这样做,因为普通用户习惯使用tab shift + tab navigation并输入key作为accept - button的等价物。
但是如果你真的需要使用回车键,你仍然可以使用Tabbing机制并使用InputManager在AssociatedObject_PreviewKeyDown上发送标签。