Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

UWP版Prismで、ルートがFrameじゃない構成のアプリを作りたい

$
0
0

UWPアプリとかストアアプリって普通はWindow.Current.ContentはFrameになるのが一般的です。 ただ、SplitViewを使ったアプリとかは、SplitViewの右側にFrameを置いて、Window.Current.ContentにはMainPageを置くということをやったりします。自分で作ってるアプリだとApp.xaml.csで色々出来るのですが、Prismを使った場合はPrismApplicationクラスが起動シーケンスを制御するので、好きにはできません。

一応PrismApplicationにはCreateShellというWindow.Current.Contentに設定するものを作るためのメソッドが用意されてるので、それを使えば出来ます。

<Page x:Class="App15.Views.MainPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"      xmlns:local="using:App15.Views"      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"      mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <SplitView x:Name="FrameContainer"                   x:FieldModifier="public">

        </SplitView>
    </Grid>
</Page>

こんな感じでMainPageを用意しておいてAppクラスで以下のようにします。

using App15.Views;
using Prism.Windows;
using System.Threading.Tasks;
using Windows.ApplicationModel.Activation;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace App15
{
    sealedpartialclass App : PrismApplication
    {
        public App()
        {
            this.InitializeComponent();
        }

        protectedoverride UIElement CreateShell(Frame rootFrame)
        {
            var mainPage = new MainPage();
            mainPage.FrameContainer.Content = rootFrame;
            return mainPage;
        }

        protectedoverride Task OnLaunchApplicationAsync(LaunchActivatedEventArgs args)
        {
            this.NavigationService.Navigate("Init", null);
            return Task.CompletedTask;
        }
    }
}

これでいい感じにできます。


Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>