我想从我的页面捕获 NavigationService.Navigating 事件,以防止用户向前导航。我有一个这样定义的事件处理程序:
void PreventForwardNavigation(object sender, NavigatingCancelEventArgs e)
{
if (e.NavigationMode == NavigationMode.Forward)
{
e.Cancel = true;
}
}
...效果很好。但是,我不确定该代码的确切位置:
NavigationService.Navigating += PreventForwardNavigation;
如果我将它放在页面的构造函数或 Initialized 事件处理程序中,则 NavigationService 仍然为 null,并且我会收到 NullReferenceException。但是,如果我将其放置在页面的 Loaded 事件处理程序中,则每次导航到该页面时都会调用它。如果我理解正确的话,这意味着我正在多次处理同一事件。
我可以多次向事件添加相同的处理程序(就像我使用页面的 Loaded 事件来连接它一样)吗?如果没有,在初始化和加载之间是否有某个地方可以进行此接线?
@Espo 你的链接帮助我找到了解决方法。我称其为解决方法,因为它是ugly,但这就是微软自己在文档中所做的:
public MyPage() // ctor
{
InitializeComponent();
this.Loaded += delegate { NavigationService.Navigating += MyNavHandler; };
this.Unloaded += delegate { NavigationService.Navigating -= MyNavHandler; };
}
所以你基本上必须取消订阅当您的页面被卸载时,来自导航服务的事件。
+1 对您帮助我找到它的回复。我似乎无法将自己的回答标记为“已接受的答案”,所以我想我现在就将其保留。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)