Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MoveFocus在箭头键上不能双向工作_C#_Wpf - Fatal编程技术网

C# MoveFocus在箭头键上不能双向工作

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

我有个奇怪的问题。我有定制的对话框和3个按钮(这些只是对话框上的可视组件)。Xaml如下所示:

<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上像对话框一样使用这种麻烦的方式