UWP開發---經過委託跨頁面導航

【前言】

  作過.Net開發的都瞭解,當二級窗口操做主窗口的控件時一般用委託的方式。那麼在UWP開發中,經常會遇到MainPage的二級Frame裏面的內容去操做MainPage的導航跳轉,具體看下圖:ide

如何經過點擊窗口把MainPage.Frame跳轉到一個新的Page函數

【舉例Demo】

[測試頁面]

1,MainPage的Grid測試

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="100"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <TextBlock Foreground="Red" FontSize="30" Text="我是MainPage" HorizontalAlignment="Center"/>
        <Border Margin="2" Grid.Row="2" BorderBrush="Black" BorderThickness="1">
        <Frame Grid.Row="1" x:Name="contentFrm">
            <local:內部頁面1/>
        </Frame>
        </Border>
</Grid>

2,內部頁面1的Gridthis

<Grid>
        <ScrollViewer>
            <StackPanel>
                <Border x:Name="widthEg" Width="120"/>
                <GridView ItemClick="GridView_ItemClick" IsItemClickEnabled="True" ItemTemplate="{StaticResource tplt}" ItemsSource="fghjglkhlhklhjl"/>
            </StackPanel>
        </ScrollViewer>
</Grid>

3,NewMainPage的Gridspa

<Grid Background="Blue">
        <TextBlock Text="我佔領MainFrame了!" FontSize="30" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>

目前要求作的就是要實現點擊內部頁面1的GridViewItem,將MainPage.Frame導航到NewMainPagecode

[後臺代碼]

1,內部頁面1.csblog

 public sealed partial class 內部頁面1 : Page
    {
        public 內部頁面1()
        {
            this.InitializeComponent();
            this.SizeChanged += 內部頁面1_SizeChanged;
        }


        private void GridView_ItemClick(object sender, ItemClickEventArgs e)
        {
            MianNavigateToEvent(typeof(NewMain));
        }
        public delegate void NavigateHandel(Type page);
        public static event NavigateHandel MianNavigateToEvent;
    }

在內部頁面1中定義委託和事件,並在ItemClick中執行跳轉事件事件

2,MainPage.cs開發

public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            內部頁面1.MianNavigateToEvent += 內部頁面1_MianNavigateToEvent;
        }

        private void 內部頁面1_MianNavigateToEvent(Type page)
        {
            this.Frame.Navigate(page);
        }
}

在MainPage的加載事件中註冊委託要執行的方法it

那麼這個方法就是將MainPage的Frame導航到目標頁面

也就是函數聲明在操做頁面,函數體在MainPage中(不知道這樣描述對不對)

[測試效果]

【實際效果】

相關文章
相關標籤/搜索