如何模拟在 WinUI 应用程序中触发 Frame.NavigationFailed 事件?

问题描述 投票:0回答:1

我想模拟由

NavigationFailed
实例触发的
Frame
事件,以查看我的应用程序的行为方式,但我无法实现这一点。

我已经检查了文档(Frame.NavigationFailedFrame.Navigate),我可以在其中找到如何处理事件的信息,但没有提及框架在什么情况下触发它。

换句话说,我必须找到一种方法让

Frame.Navigate
方法返回 false。根据文档,我必须在
NavigationFailedEventArgs.Handled
事件处理程序中将 Frame.NavigationFailed 属性设置为
true
- 但我无法强制框架触发事件。

我尝试在

Frame.Navigate
方法中提供不正确的源页面类型参数,但它没有按我的预期工作 - 该方法只是抛出异常,而不是将其重定向到
NavigationFailed
事件处理程序。

我还尝试从

OnNavigatedTo
事件处理程序抛出异常,但结果与上面相同(这实际上是预期的,因为该事件在成功导航后被触发)。

.net winui-3
1个回答
0
投票

Navigated
事件处理程序中引发异常应该发出
NavigationFailed

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        InitializeComponent();
        ContentFrame.Navigated += ContentFrame_Navigated;
    }

    private void NavigationViewControl_SelectionChanged(NavigationView sender, NavigationViewSelectionChangedEventArgs args)
    {
        try
        {
            var result = this.ContentFrame.Navigate(typeof(Page1));

            // Doesn't get to this line.
            if (result is false)
            {
                // Do something.
            }
        }
        catch (Exception exception)
        {
            // Catches the NotImplementedException.
        }
    }

    private void ContentFrame_Navigated(object sender, NavigationEventArgs e)
    {
        throw new NotImplementedException();
    }

    private void ContentFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
    {
        e.Handled = true;
    }
}

不幸的是,将

e.Handled
设置为
true
并不能阻止异常,因此您将无法从
Navigate
方法获得返回。我不确定这是设计使然还是错误,但我在 WinUI 3 存储库中创建了一个 issue

© www.soinside.com 2019 - 2024. All rights reserved.