C# MoveFocus在箭头键上不能双向工作
我有个奇怪的问题。我有定制的对话框和3个按钮(这些只是对话框上的可视组件)。Xaml如下所示:C# MoveFocus在箭头键上不能双向工作,c#,wpf,C#,Wpf,我有个奇怪的问题。我有定制的对话框和3个按钮(这些只是对话框上的可视组件)。Xaml如下所示: <Button x:Name="PrintBtn" Click="Btn1_Click" Content="Print" IsTabStop="True" Focusable="True" KeyboardNavigation.TabIndex="1" Pre
<Button x:Name="PrintBtn" Click="Btn1_Click" Content="Print"
IsTabStop="True" Focusable="True" KeyboardNavigation.TabIndex="1"
PreviewKeyDown="Btn1_PreviewKeyDown"/>
<Button x:Name="NewBtn" Click="Btn2_Click" Content="New"
IsTabStop="True" Focusable="True" KeyboardNavigation.TabIndex="2"
PreviewKeyDown="Btn2_PreviewKeyDown"/>
<Button x:Name="CancelBtn" Click="Btn3_Click" Content="Cancel"
IsTabStop="True" Focusable="True" KeyboardNavigation.TabIndex="3"
PreviewKeyDown="Btn3_PreviewKeyDown"/>
private void Button_KeyDown(object sender, KeyEventArgs e)
{
switch (e.Key)
{
case Key.Right:
Keyboard.Focus(BtnCanel);
break;
case Key.Left:
Keyboard.Focus(BtnApproval);
break;
default:
return;
}
}
但当我只是切换钥匙和方向时,它根本不起作用
switch (e.Key)
{
case Key.Left:
btnX.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
break;
case Key.Right:
btnX.MoveFocus(new TraversalRequest(FocusNavigationDirection.Previous);
break;
default:
break;
}
我已经尝试了我能想到的一切,但没有成功。任何帮助都将不胜感激。第一个问题:
你试过没有任何编码吗?WPF有一个基于ui元素结构的内置箭头导航,大多数情况下它工作得很好
后续办法:
我假设您的对话框是在另一个用户控件或类似控件上呈现的。因此,您的键盘焦点可能位于对话框下的其他uicontrol上。然而,在您的情况下,我也会假设不需要通用的解决方案,即使最好有一个。我也为这个问题做了很多努力,最后我硬编码结果如下:
<Button x:Name="PrintBtn" Click="Btn1_Click" Content="Print"
IsTabStop="True" Focusable="True" KeyboardNavigation.TabIndex="1"
PreviewKeyDown="Btn1_PreviewKeyDown"/>
<Button x:Name="NewBtn" Click="Btn2_Click" Content="New"
IsTabStop="True" Focusable="True" KeyboardNavigation.TabIndex="2"
PreviewKeyDown="Btn2_PreviewKeyDown"/>
<Button x:Name="CancelBtn" Click="Btn3_Click" Content="Cancel"
IsTabStop="True" Focusable="True" KeyboardNavigation.TabIndex="3"
PreviewKeyDown="Btn3_PreviewKeyDown"/>
private void Button_KeyDown(object sender, KeyEventArgs e)
{
switch (e.Key)
{
case Key.Right:
Keyboard.Focus(BtnCanel);
break;
case Key.Left:
Keyboard.Focus(BtnApproval);
break;
default:
return;
}
}
即使这缺乏导航过程的自动化,它也是您所需行为的明确声明,并且不会在Ui中的某些内容发生更改时更改。因此,如果自然的wpf导航不适合我的需要,我倾向于在小Ui上像对话框一样使用这种麻烦的方式