我创建了一个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 ..?
答案 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));
}