我的主页上的说明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));
}
答案 0 :(得分:0)
由于您的应用正准备启动某些组件,因此您需要花一些时间在您的应用上加载组件。
所以你需要像这样延迟 -
using System.Threading.Tasks;
public MainPage()
{
this.InitializeComponent();
Loaded += async (s, e) =>
{
await Task.Delay(100);
Frame.Navigate(typeof(RegionPage));
};
}
您可以相应地调整延迟。
演示 -
替代方式 -
首次启动您的完整解决方案应该会显示一些特定的页面或教程页面,您可以在 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。”