如何禁用框架c#WPF中的导航快捷方式

Lar*_*ele 10 c# keyboard wpf keyboard-shortcuts

如何禁用框架中的导航快捷方式(例如,"Backspace"用于向后导航,"Alt +向右箭头"用于向前导航).

我想使用其他键盘功能,所以我想禁用框架的导航快捷方式.

谁能帮我?

Osa*_*ved 15

有一个更优雅的解决方案,其中附加行为可用于禁用导航而不实际扩展框架.

创建附加行为:

using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;

namespace A
{
    public static class DisableNavigation
    {
        public static bool GetDisable(DependencyObject o)
        {
            return (bool)o.GetValue(DisableProperty);
        }
        public static void SetDisable(DependencyObject o, bool value)
        {
            o.SetValue(DisableProperty, value);
        }

        public static readonly DependencyProperty DisableProperty =
            DependencyProperty.RegisterAttached("Disable", typeof(bool), typeof(DisableNavigation),
                                                new PropertyMetadata(false, DisableChanged));



        public static void DisableChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            var frame = (Frame)sender;
                       frame.Navigated += DontNavigate;
            frame.NavigationUIVisibility = NavigationUIVisibility.Hidden;
        }

        public static void DontNavigate(object sender, NavigationEventArgs e)
        {
            ((Frame)sender).NavigationService.RemoveBackEntry();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在xaml中,每当你使用一个框架时添加它:

<Frame beha:DisableNavigation.Disable="True" />
Run Code Online (Sandbox Code Playgroud)

并在xaml的顶部添加导入:

xmlns:beha="clr-namespace:A"
Run Code Online (Sandbox Code Playgroud)


Ant*_*ard 5

有关如何禁用键盘快捷键的信息,请参阅此答案:

在wpf中禁用退格键

这不适用于后退和前进导航鼠标按钮。为了防止这种情况发生,您似乎需要在导航事件上放置一个处理程序,如果您不需要,则将其取消。

例如,要完全禁用向前导航:

在.xaml中:

<Frame Navigating="HandleNavigating" />
Run Code Online (Sandbox Code Playgroud)

在后面的代码中:

    void HandleNavigating(Object sender, NavigatingCancelEventArgs e)
    {
        if (e.NavigationMode == NavigationMode.Forward)
        {
            e.Cancel = true;
        }
    }
Run Code Online (Sandbox Code Playgroud)


Edd*_*die 0

它本身的框架没有提供禁用导航的方法。它仅提供隐藏导航控件的方法。不过,您可以继承 Frame 类并自行对其进行一些修改。以下示例在每次页面导航时从 BackStack 中删除最后一页。从而确保框架永远不会向后导航,因为它不知道哪一页是最后一页。

class NoNavFrame : Frame
{
    public NoNavFrame()
    {
        this.Navigated += new System.Windows.Navigation.NavigatedEventHandler(NoNavFrame_Navigated);
    }

    void NoNavFrame_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
    {
        this.NavigationService.RemoveBackEntry();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后您可以将其包含在 XAML 中,如下所示...

    <myControls:NoNavFrame x:Name="myFrame" NavigationUIVisibility="Hidden" />
Run Code Online (Sandbox Code Playgroud)