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

时间:2015-03-10 07:32:03

标签: windows-phone-8 windows-phone-8.1

我创建了一个Windows Phone 8.1应用程序,它在屏幕顶部有两个选项卡。根据用户选择,更新选项卡下方的区域。现在我通过定义两个堆栈面板(每个选项卡视图一个)并在用户单击选项卡时更改其可见性(折叠一个视图并使其他可见)来实现此功能。我在每个视图中都有单独的事件处理程序(如按钮单击)这种方法工作正常。我需要的是将两个视图分成两个单独的类甚至页面..或者某些东西(我完全不知道该怎么做..),它可以在运行时加载到我的选项卡下面,具体取决于用户对tab的选择.I需要在单独的部分中定义事件处理程序..类或甚至页面......或类似的东西(不在MainPage的相同.cs文件中)

I need  something like  fragments in Android.

What is the best approach to achieve this in Windows Phone 8.1 ..?

2 个答案:

答案 0 :(得分:0)

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

它与CS文件中的 Page 一样,您可以在其中使用事件处理程序。

然后只需在主布局中使用这些新创建的用户控件替换堆栈面板。

改变能见度很好。如果控件在开始时已折叠,那么它将无法加载,直到其可见性设置为可见(我在我的应用中使用此可见性技巧来向用户页面加载...但它是另一个对话的主题。)

答案 1 :(得分:0)

使用Visibility属性隐藏或显示控件,而不是使用Opacity属性,从而提高应用程序性能。当您更改“可见性”时,将重绘整个控件,因此当您在UserControl中使用复杂的xaml时需要花费更多时间。

如果您想使用导航参数,可以在Frames中使用两个Grid,然后您可以浏览每个Frame的每个页面。这仅适用于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));
        }