IrApp
IrApp

Reputation: 1843

Universal Windows Platform (UWP) equivalent to get main application UI

I am trying to migrate a Windows Phone 8.1 Silverlight app to UWP. I have an error getting the Main Application UI.

This is the windows Windows Phone 8.1 Silverlight code:

Storage storage = ((App.Current.RootVisual as PhoneApplicationFrame).DataContext as Storage);

This is what I've done for the UWP version:

Storage storage = ((Window.Current.Content as Frame).DataContext as Storage);

I get a NullPointerException. Any ideas?

Thanks in advance.

EDIT

This is my 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>

This is my class Store to save the last Uri:

 namespace windows
{
public class Storage
{
    #region Properties
    private Uri _lastUri = null;
    public Uri lastUri 
    { 
        get {return _lastUri;} 
        set
        {
            _lastUri = value;
        }
    }
    #endregion
}
}

SECOND EDIT

Code where I use Store 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;
    }

Upvotes: 3

Views: 2673

Answers (1)

Tom Droste
Tom Droste

Reputation: 1324

The datacontext of the Frame is indeed NULL. This because the frame houses the view inside the another content variable. That one will contain your DataContext.

You will need to declare the content as a page. Below here is an example:

((Window.Current.Content as Frame).Content as Page).DataContext;

Upvotes: 2

Related Questions