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

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

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

谁能帮我?

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

创建附加行为:

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(); } } } 

并且在xaml中,每当您使用框架时添加它:

  

并在xaml的顶部添加导入:

 xmlns:beha="clr-namespace:A" 

它自己的框架没有提供禁用导航的方法。 它只提供隐藏导航控件的方法。 但是,您可以inheritanceFrame类并自行对其进行一些修改。 以下示例在每次页面导航时从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(); } } 

然后你可以将它包含在XAML中,如下所示……

   

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

禁用wpf中的退格

这对后退和前进导航鼠标按钮不起作用。 为了防止这种情况,你似乎需要在Navigating事件上放置一个处理程序,如果你不想要它就取消它。

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

在.xaml中:

  

代码背后:

  void HandleNavigating(Object sender, NavigatingCancelEventArgs e) { if (e.NavigationMode == NavigationMode.Forward) { e.Cancel = true; } } 

我所做的是在ContentControl中托管内容。