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

How to load a separate view in to an XAML at runtime in 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 ..?

您只需要UserControl。它允许你做你所描述的一切。在 SolutionExplorer 中右键单击您的项目名称,然后选择 Add > New Item... > 用户控制.

就像 Page CS 文件一样,您可以在其中包含事件处理程序。

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

更改可见性没问题。如果控件在开始时 collapsed,那么它不会被加载,直到它的可见性设置为可见(我在我的应用程序中使用这个 visibility trick向用户显示页面加载...但这是另一个对话的主题)。

不使用 Visibility 属性,而是使用 Opacity 属性 来隐藏或显示控件,这提高了应用程序性能。当您更改可见性时,整个控件都会重新绘制,因此当您在 UserControl 中使用复杂的 xaml 时会花费更多时间。

如果你想使用导航参数,你可以在一个 Grid 中使用两个 Frames,你可以通过每个 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));
        }