繁体   English   中英

如何在Windows Phone应用程序的页面内导航页面

[英]How can i navigate pages inside a page in Windows Phone Application

我正在创建WindowsPhone应用程序,我必须为其导航至应用程序内的某些页面,但我不想离开MainPage。

就像MainPage内的一小页一样,有什么办法吗?

我尝试为同一用户创建用户控件,但缺点是紧随MainPage加载后才加载用户控件,但我不希望这样。 我想单击应用程序中的某个位置,然后将其加载到内部的下一页(保持应用程序快速运行),而不是在MainPage加载事件中一次加载所有用户控件。

如果您有其他替代方法可以提供帮助,请回复。

当第一帧保持打开状态时,无法导航到某个帧。 并且由于枢轴/全景,您无法使用弹出窗口。 您必须坚持使用用户控制方法。 您可以优化xaml的性能,以下是一些有关如何优化xaml的提示

优化加载XAML

编辑

    MyUserControl1 control = new MyUserControl1();
    control.DataContext = //bindable data from usercontrol
    this.ContentRoot.Children.Add(control);

只需在MainPage内添加一个框架即可。 使用该框架导航到其他页面。

 <Grid x:Name="LayoutRoot">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid x:Name="TitlePanel" Grid.Row="0">
            <StackPanel Orientation="Vertical">
                <TextBlock Text="Title" />
                <Button Click="Button_Click"
                        Content="Page1"
                        Tag="SharedFrame.BasicPage1" />
                <Button Click="Button_Click"
                        Content="Page2"
                        Tag="SharedFrame.BasicPage2" />
            </StackPanel>
        </Grid>
        <Grid x:Name="ContentPanel" Grid.Row="1">
            <Frame x:Name="rootFrame" />
        </Grid>
    </Grid>

这是您从后面的代码导航的方式:

private void Button_Click(object sender, RoutedEventArgs e)
{
               Button b = sender as Button;

                if (b != null && b.Tag != null)
                {
                      Type pageType = Type.GetType(b.Tag.ToString());


                       if (pageType != null && rootFrame.CurrentSourcePageType != pageType)
                       {

                            rootFrame.Navigate(pageType);
                       }
                 }   
}

BasicPage1和BasicPage2是我要导航到MainPage内部的页面。

如果您的主页有足够的可用空间来容纳“其他页面”,则可以尝试以下操作:在主XAML中放置另一个框架,然后将其他页面导航到该框架。 您的主体仍然可见且处于活动状态。

我已经在更大的屏幕(平板电脑)上这样做了,并且知道了陷阱。 不要将导航助手用于其他页面,因为您将不会向后导航,而是将其他“其他页面”发送到该框架。 或在导航后删除上一个后退堆栈条目。

secondFrame.Navigate(pageType, frames);
if (secondFrame.BackStackDepth > 0)
   secondFrame.BackStack.RemoveAt(secondFrame.BackStackDepth - 1);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM