gpt4 book ai didi

.net - NavigationService 什么时候初始化?

转载 作者:行者123 更新时间:2023-12-02 02:38:48 24 4
gpt4 key购买 nike

我想从我的页面捕获 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 事件来连接它会发生这种情况)?如果没有,在 Initialized 和 Loaded 之间是否有某个地方可以进行此连接?

最佳答案

@Espo 你的链接帮助我找到了解决方法。我称它为解决方法,因为它丑陋,但这是 MS 自己在其文档中所做的:

public MyPage() // ctor
{
InitializeComponent();
this.Loaded += delegate { NavigationService.Navigating += MyNavHandler; };
this.Unloaded += delegate { NavigationService.Navigating -= MyNavHandler; };
}

所以当您的页面卸载时,您基本上必须取消订阅导航服务的事件。

+1 到您帮助我找到它的回复。我似乎无法将自己的回复标记为“已接受的答案”,所以我想我暂时保留它。

关于.net - NavigationService 什么时候初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com