Windows 8.1应用程序中的左侧导航窗格

时间:2013-11-18 13:42:13

标签: c# xaml windows-runtime winrt-xaml windows-8.1

我想在我的Windows 8.1应用程序中创建一个类似于Xbox音乐应用程序的UI,因为左侧会有一个导航窗格,其中的按钮可以在应用程序中的不同视图(页面)之间切换。

我应该如何构建它?我是否应该在其中嵌入导航窗格的“主”页面,然后在运行时,单击导航按钮时,将各种不同的页面加载为UserControls(因此每个单独的页面实际上是用户控件)。

或者每个页面都应该是不同的并且是一个非常好的页面。每个页面都将导航窗格作为用户控件引用(因此在本例中,导航栏将是用户控件中的导航栏)。

另外,我想创建一个顶部导航栏,当应用程序处于320px(停靠)并且左侧导航栏消失时出现 - 如果不同用户控件之间的两个不同的导航栏?或者通过视觉状态转换直观地操纵一个会更好吗?你推荐什么?

非常感谢

2 个答案:

答案 0 :(得分:2)

由于这不是一个WinJS问题,让我给你一个XAML答案。

简单的Grid将完成此操作。我们假设你有一个viewmodel;所以,像这样:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="300" />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>

    <Rectangle Fill="SteelBlue" />
    <StackPanel Grid.Column="0">
        <TextBlock 
            Margin="20"
            Text="Playlists"
            Style="{StaticResource SubheaderTextBlockStyle}" />
        <ListView
            Margin="20,0,0,0"
            SelectionMode="Single"
            SelectedItem="{Binding SelectedPlaylist, Mode=TwoWay}"
            ItemsSource="{Binding Playlists}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Border Height="25" Width="25" Background="White" />
                        <TextBlock 
                            Margin="10,0,0,0" LineHeight="0" FontWeight="Light"
                            Text="{Binding Title, FallbackValue='Sample Playlist Title'}"
                            VerticalAlignment="Center" Style="{StaticResource TitleTextBlockStyle}" />
                    </StackPanel>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
            <x:String>Test</x:String>
            <x:String>Test</x:String>
            <x:String>Test</x:String>
            <x:String>Test</x:String>
            <x:String>Test</x:String>
            <x:String>Test</x:String>
            <x:String>Test</x:String>
        </ListView>
    </StackPanel>

    <Rectangle Grid.Column="1" Fill="LightSteelBlue" />
    <ContentControl Grid.Column="1" Content="{Binding SelectedPlaylist}">
        <ContentControl.ContentTemplate>
            <DataTemplate>
                <TextBlock 
                    Margin="40,60,0,0" 
                    Style="{StaticResource HeaderTextBlockStyle}"
                    Text="{Binding Title, FallbackValue='Sample Playlist Title'}" />
                <!-- TODO: -->
            </DataTemplate>
        </ContentControl.ContentTemplate>
    </ContentControl>

</Grid>

这看起来像这样:

enter image description here

祝你好运!

答案 1 :(得分:0)

我建议您使用带有NavBar的Windows 8.1的平面布局模式(http://msdn.microsoft.com/en-us/library/windows/apps/dn263196.aspx)。

然后将NavBarContainer.layout属性设置为vertical(http://msdn.microsoft.com/en-us/library/windows/apps/dn301873.aspx