Windows phone 8 如何在Windows Phone 8.1中运行时将单独的视图加载到XAML。。。。。?

Windows phone 8 如何在Windows Phone 8.1中运行时将单独的视图加载到XAML。。。。。?,windows-phone-8,windows-phone-8.1,Windows Phone 8,Windows Phone 8.1,我创建了一个WindowsPhone8.1应用程序,在屏幕顶部有两个选项卡。根据用户选择,选项卡下方的区域将更新。现在,我通过定义两个堆栈面板(每个选项卡视图一个)实现了这一点,并在用户单击选项卡时更改其可见性(折叠一个视图,使其他视图可见)。我在每个视图中都有单独的事件处理程序(如按钮单击),这种方法运行良好。我需要的是将这两个视图拆分为两个单独的类或甚至页面..或其他(我完全不知道如何做..),它们可以在运行时加载到选项卡下方,具体取决于用户对选项卡的选择。我需要在单独的部分中定义事件处理程

我创建了一个WindowsPhone8.1应用程序,在屏幕顶部有两个选项卡。根据用户选择,选项卡下方的区域将更新。现在,我通过定义两个堆栈面板(每个选项卡视图一个)实现了这一点,并在用户单击选项卡时更改其可见性(折叠一个视图,使其他视图可见)。我在每个视图中都有单独的事件处理程序(如按钮单击),这种方法运行良好。我需要的是将这两个视图拆分为两个单独的类或甚至页面..或其他(我完全不知道如何做..),它们可以在运行时加载到选项卡下方,具体取决于用户对选项卡的选择。我需要在单独的部分中定义事件处理程序..即类或甚至页面..或类似的内容(不在主页的同一.cs文件中)


您所需要的只是
UserControl
。它允许您执行所描述的所有操作。右键单击SolutionExplorer中的项目名称,然后选择添加>新建项…>用户控件

这就像使用CS文件的页面一样,您可以在其中使用事件处理程序

然后用主布局中新创建的用户控件替换堆栈面板


更改可见性没有问题。如果控件在开始时折叠,则在其可见性设置为可见之前不会加载它(我在应用程序中使用此可见性技巧向用户显示页面加载…但这是另一个对话的主题).

使用
不透明度
属性来隐藏或显示控件,而不是使用
可见性
属性,这样可以提高应用程序的性能。当您更改可见性时,整个控件将被重新绘制,因此当您的UserControl中有复杂的xaml时,需要花费更多的时间

如果您想使用导航参数,您可以在
网格中使用两个
框架
,并且您可以通过每个
框架
导航到每个页面。这仅在windows phone 8.1应用程序中才可能实现

示例代码:

   <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
            <Frame Name="frame1" Grid.Row="0"/>
            <Frame Name="frame2" Grid.Row="1"/>
    </Grid>

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        frame1.Navigate(typeof(BlankPage1));
        frame2.Navigate(typeof(BlankPage2));
        }

受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e)
{
框架1.导航(typeof(BlankPage1));
框架2.导航(typeof(BlankPage2));
}

使用“用户控件”,它们将帮助您为不同的视图创建不同的类,您可以将它们动态加载到页面上,但我建议您从Xaml加载它们,并在运行时更改它们的可见性。看看这是否有帮助。我可以知道您为什么建议更改可见性吗?据我从用户控件了解,它只是一个新控件,没有任何可见性与之相关的生命周期。因此,必须从主页上注意生命周期。这是否正确……或者UserControl是否有自己的OnNavigatedTo和相关方法没有UserControl将没有导航事件。
   <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
            <Frame Name="frame1" Grid.Row="0"/>
            <Frame Name="frame2" Grid.Row="1"/>
    </Grid>

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        frame1.Navigate(typeof(BlankPage1));
        frame2.Navigate(typeof(BlankPage2));
        }