wpf 如何禁用Alt +箭头关键帧导航?

wfveoks0  于 2023-04-22  发布在  其他
关注(0)|答案(2)|浏览(134)

我以mvvm的方式启动了一个WPF应用程序。主窗口包含一个用于在不同页面中导航的框架控件。为此,我现在使用一个简单的NavigationService:

public class NavigationService : INavigationService
{

   private Frame _mainFrame;

    #region INavigationService Member

    public event NavigatingCancelEventHandler Navigating;

    public void NavigateTo(Uri uri)
    {
        if(EnsureMainFrame())
        {
            _mainFrame.Navigate(uri);
        }
    }

    public void GoBack()
    {
        if(EnsureMainFrame() && _mainFrame.CanGoBack)
        {
            _mainFrame.GoBack();
        }
    }

    #endregion

    private bool EnsureMainFrame()
    {
        if(_mainFrame != null)
        {
            return true;
        }

        var mainWindow = (System.Windows.Application.Current.MainWindow as MainWindow);
        if(mainWindow != null)
        {
            _mainFrame = mainWindow.NavigationFrame;
            if(_mainFrame != null)
            {
                // Could be null if the app runs inside a design tool
                _mainFrame.Navigating += (s, e) =>
                                             {
                                                 if (Navigating != null)
                                                 {
                                                     Navigating(s, e);
                                                 }
                                             };
                return true;
            }
        }
        return false;
    }

}

在Page1上,按下按钮会使用NavigationService强制导航到Page2。在Page2上有一个TextBox。如果TextBox被聚焦,我可以使用ALT +左箭头键导航回Page1。如何禁用此行为?
我尝试在框架控件和文本框控件中设置KeyboardNavigation.DirectionalNavigation=“None”,但没有成功。

vd8tlhqk

vd8tlhqk1#

将以下事件处理程序添加到文本框以禁用alt + left导航:

private void textBox1_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if ((Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt)) 
        && (Keyboard.IsKeyDown(Key.Left)))
    {
         e.Handled = true;
    }
}

XAML

<TextBox ... KeyDown="textBox1_PreviewKeyDown" />

**编辑:**改为PreviewKeyDown,以捕获箭头键事件

yruzcnhs

yruzcnhs2#

对于前进,我使用了alt +右箭头键;对于后退,我使用了alt +左箭头键。要在使用webview 2时禁用这些快捷键,我们可以使用以下代码。

Webview2 edge = new Webview2();

public Form1()
    {
        InitializeComponent();
        edge.KeyDown += EdgeWebBrowser_KeyDown;
    }

private void EdgeWebBrowser_KeyDown(object sender, KeyEventArgs e)
    {
        if (((e.KeyCode == Keys.Left) && (GetAsyncKeyState(Keys.Menu) < 0)) || ((e.KeyCode == Keys.Right) && (GetAsyncKeyState(Keys.Menu) < 0)) || (e.KeyCode == Keys.F5) || ((e.KeyCode == Keys.R) && (GetAsyncKeyState(Keys.ControlKey) < 0)))
            {
                e.Handled = true;
            }
    }

相关问题