通用 Windows 平台 (UWP) 相当于获取主应用程序 UI
Universal Windows Platform (UWP) equivalent to get main application UI
我正在尝试将 Windows Phone 8.1 Silverlight
应用程序迁移到 UWP
。我在获取 Main Application UI
时出错。
这是windowsWindows Phone 8.1 Silverlight
代码:
Storage storage = ((App.Current.RootVisual as PhoneApplicationFrame).DataContext as Storage);
这是我为 UWP
版本所做的:
Storage storage = ((Window.Current.Content as Frame).DataContext as Storage);
我得到一个 NullPointerException
。有什么想法吗?
提前致谢。
编辑
这是我的 xaml:
<Page
x:Class="windows_phone.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="20"
Foreground="#FF000000">
<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel contains the name of the application and page title-->
<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="0,0,0,0">
<WebView
x:Name="webView"
Margin="0,0,0,0"
Grid.Row="1"
/>
</Grid>
</Grid>
这是我的 class 商店保存最后一个 Uri:
namespace windows
{
public class Storage
{
#region Properties
private Uri _lastUri = null;
public Uri lastUri
{
get {return _lastUri;}
set
{
_lastUri = value;
}
}
#endregion
}
}
第二次编辑
我使用商店的代码 class:
public sealed partial class MainPage : Page
{
private Storage storage = null;
....
protected override void OnNavigatedTo(NavigationEventArgs e)
{
storage = (((Window.Current.Content as Frame).Content as Page).DataContext as Storage);
if (Storage.lastUri != null) webView.Navigate(Storage.lastUri);
base.OnNavigatedTo(e);
}
void webView_LoadCompleted(object sender, NavigationEventArgs e)
{
if (webView.Source.ToString().Contains("login"))
{
string id = LoadUserIdFromIsolatedStorage();
String[] data = new String[1];
data[0] = id;
if (id != null)
webView.InvokeScript("WinHelp", data);
}
progressIndicator.Visibility = Visibility.Collapsed;
Storage.lastUri = e.Uri;
}
Frame 的数据上下文确实是NULL
。这是因为框架将视图包含在另一个内容变量中。那个将包含您的 DataContext
.
您需要将内容声明为页面。下面是一个例子:
((Window.Current.Content as Frame).Content as Page).DataContext;
我正在尝试将 Windows Phone 8.1 Silverlight
应用程序迁移到 UWP
。我在获取 Main Application UI
时出错。
这是windowsWindows Phone 8.1 Silverlight
代码:
Storage storage = ((App.Current.RootVisual as PhoneApplicationFrame).DataContext as Storage);
这是我为 UWP
版本所做的:
Storage storage = ((Window.Current.Content as Frame).DataContext as Storage);
我得到一个 NullPointerException
。有什么想法吗?
提前致谢。
编辑
这是我的 xaml:
<Page
x:Class="windows_phone.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="20"
Foreground="#FF000000">
<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel contains the name of the application and page title-->
<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="0,0,0,0">
<WebView
x:Name="webView"
Margin="0,0,0,0"
Grid.Row="1"
/>
</Grid>
</Grid>
这是我的 class 商店保存最后一个 Uri:
namespace windows
{
public class Storage
{
#region Properties
private Uri _lastUri = null;
public Uri lastUri
{
get {return _lastUri;}
set
{
_lastUri = value;
}
}
#endregion
}
}
第二次编辑
我使用商店的代码 class:
public sealed partial class MainPage : Page
{
private Storage storage = null;
....
protected override void OnNavigatedTo(NavigationEventArgs e)
{
storage = (((Window.Current.Content as Frame).Content as Page).DataContext as Storage);
if (Storage.lastUri != null) webView.Navigate(Storage.lastUri);
base.OnNavigatedTo(e);
}
void webView_LoadCompleted(object sender, NavigationEventArgs e)
{
if (webView.Source.ToString().Contains("login"))
{
string id = LoadUserIdFromIsolatedStorage();
String[] data = new String[1];
data[0] = id;
if (id != null)
webView.InvokeScript("WinHelp", data);
}
progressIndicator.Visibility = Visibility.Collapsed;
Storage.lastUri = e.Uri;
}
Frame 的数据上下文确实是NULL
。这是因为框架将视图包含在另一个内容变量中。那个将包含您的 DataContext
.
您需要将内容声明为页面。下面是一个例子:
((Window.Current.Content as Frame).Content as Page).DataContext;