第一次打开应用程序无法更改页面

时间:2017-09-26 18:11:57

标签: c# uwp navigation uinavigation

我的主页上的说明this.Frame.Navigate(typeof(RegionPage));不起作用。它会产生一个例外:

  

System.NullReferenceException:'对象引用未设置为对象的实例。'

所以我尝试在主页之后将它放在某个功能中,一切顺利。

我的目标:我想制作一个控件,如果它是第一次用户打开应用程序,它将显示一个包含教程的新页面。

问题:我该如何解决这个问题?

public MainPage()
{
    this.InitializeComponent();

    Windows.UI.Core.SystemNavigationManager.GetForCurrentView().BackRequested += App_BackRequested;
    this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;

    TextBoxRicerca.Visibility = Visibility.Collapsed;
    Mappe.Loaded += Mappe_Loaded;

    Regione.RegNome = "";

    this.Frame.Navigate(typeof(RegionPage));                
}

2 个答案:

答案 0 :(得分:0)

由于您的应用正准备启动某些组件,因此您需要花一些时间在您的应用上加载组件。

所以你需要像这样延迟 -

using System.Threading.Tasks;


public MainPage()
{
    this.InitializeComponent();
    Loaded += async (s, e) =>
    {
        await Task.Delay(100);
        Frame.Navigate(typeof(RegionPage));
    };
}

您可以相应地调整延迟。

演示 -

Demo

替代方式 -

首次启动您的完整解决方案应该会显示一些特定的页面或教程页面,您可以在 OnLaunched 事件中编辑 App.xaml.cs < / p>

using Windows.Storage;


if (e.PrelaunchActivated == false)
{
    if (rootFrame.Content == null)
    {
        IPropertySet roamingProperties = ApplicationData.Current.RoamingSettings.Values;
        if (roamingProperties.ContainsKey("FirstTimePage"))
        {
            // regular visit
            rootFrame.Navigate(typeof(MainPage), e.Arguments);
        }
        else
        {
            // first time visit
            rootFrame.Navigate(typeof(RegionPage), e.Arguments);
            roamingProperties["FirstTimePage"] = bool.TrueString;       
        }
    }
    // Ensure the current window is active
    Window.Current.Activate();
}

答案 1 :(得分:0)

我不喜欢使用延迟,在OnLaunched事件中编辑App.xaml.cs太困难了。 所以我做了一个混合并放了一个“加载+ =加载;”在主要和创建..

public MainPage()
{
    this.InitializeComponent();

    Windows.UI.Core.SystemNavigationManager.GetForCurrentView().BackRequested += App_BackRequested;
    this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;

    TextBoxRicerca.Visibility = Visibility.Collapsed;
    Mappe.Loaded += Mappe_Loaded;

    Regione.RegNome = "";

    **Loaded += Loading;**

    //this.Frame.Navigate(typeof(RegionPage));                
}

..创建了函数:

private void Loading(object sender, RoutedEventArgs e)
        {
            this.Frame.Navigate(typeof(RegionPage));
        }

它只给我一条消息,我应该在某处添加一个“新”,不知道在哪里,也不知道为什么,但是有效:D

“Avviso CS0108'MainPage.Loading(object,RoutedEventArgs)'nasconde il membro ereditato'FrameworkElement.Loading'.Se questocomportamentoèwantzionale,usare la parola chiave new。”