用于xaml SplitView窗格的状态管理器

时间:2015-09-21 06:29:39

标签: c# xaml win-universal-app

这是一个很长的头衔。 所以我有一个Shell.xaml,内容为.xaml的

<Grid>
<VisualStateManager.VisualStateGroups>
    <VisualStateGroup>
        <VisualState>
            <VisualState.StateTriggers>
                <AdaptiveTrigger MinWindowWidth="720" />
            </VisualState.StateTriggers>
            <VisualState.Setters>
                <Setter Target="ShellSplitView.DisplayMode" Value="CompactInline"/>
            </VisualState.Setters>
        </VisualState>
        <VisualState>
            <VisualState.StateTriggers>
                <AdaptiveTrigger MinWindowWidth="0" />
            </VisualState.StateTriggers>
            <VisualState.Setters>
                <Setter Target="ShellSplitView.DisplayMode" Value="Overlay"/>
            </VisualState.Setters>
        </VisualState>
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<SplitView x:Name="ShellSplitView">
    <SplitView.Pane>
        <Grid>
            <ListView x:Name="NavMenuList">
            ...
            </ListView>
        </Grid>
    </SplitView.Pane>
    <Frame x:Name="ContentFrame">
    </Frame>
</SplitView>
</Grid>

在此框架内,其他.xaml是实际内容的loadad。那些也使用a(添加更深度,如邮件应用程序:文件夹 - &gt;电子邮件列表 - &gt;电子邮件视图),但如果我添加到该嵌套的xaml它不会做任何事情。

我的目标是让它在小视图(如手机)中表现得像两个独立的帧,因此用户可以在它们之间导航(再次像win10邮件应用程序一样)。

现在,Frame xaml的VisualStateManager看起来像这样,但这只是一个测试,看它是否正常工作。正如我所提到的,我更喜欢与邮件应用程序类似的行为。

<VisualStateManager.VisualStateGroups>
    <VisualStateGroup>
        <VisualState>
            <VisualState.StateTriggers>
                <AdaptiveTrigger MinWindowWidth="720" />
            </VisualState.StateTriggers>
            <VisualState.Setters>
                <Setter Target="PeopleSplitView.DisplayMode" Value="Inline"/>
            </VisualState.Setters>
        </VisualState>
        <VisualState>
            <VisualState.StateTriggers>
                <AdaptiveTrigger MinWindowWidth="0" />
            </VisualState.StateTriggers>
            <VisualState.Setters>
                <Setter Target="PeopleSplitView.DisplayMode" Value="CompactInline"/>
                <Setter Target="PeopleSplitView.IsPanelOpen" Value="False"/>
            </VisualState.Setters>
        </VisualState>
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

同样在调整窗口大小时,帧splitview内容的内容不会自行调整大小并保持全宽(因此不会包装文本)。

<SplitView x:Name="PeopleSplitView"
           DisplayMode="Inline"
           IsPaneOpen="True"
           OpenPaneLength="400"
           CompactPaneLength="48">

    <SplitView.Pane></SplitView.Pane>
    <SplitView.Content>
        <Grid Padding="0">
            <ListView.../> 
        </Grid>
    </SplitView.Content>
</SplitView> 

1 个答案:

答案 0 :(得分:0)

你需要删除在列表视图中选择框架时找到的c#代码的这个元素

我认为这应该可以帮到你

private void ListViewSplit_Tapped(object sender,TappedRoutedEventArgs e)
 { 
    //delete those lines
    if (MySplitView.IsPaneOpen)
        MySplitView.IsPaneOpen = !MySplitView.IsPaneOpen;                                           
  }