2015-12-29 2 views
0

Я боролся с управлением SplitView, пытаясь создать образец (и простой!) UW App. Первый список вопросов, а затем код:UWP: проблемы с SplitView с VisualStateManager

  1. Я использую VisualStateManager контролировать DisplayState и Pane видимость. Поэтому я не использую соответствующие атрибуты (DisplayMode и IsPaneOpen) в XAML.
    Вопросы, относящиеся:
    a.иногда художник-дизайнер Exception from HRESULT: 0x88000FA8
    б. Панель всегда находится в Closed Состояние - в Дизайнере и в Runtime.
    c. Я также получаю исключение во время выполнения, показывая Debugger код, но после перезапуска Visual Studio он остановлен.
  2. Если я добавлю два атрибута в разметке XAML (комментируя VisualStateManager), то для следующей комбинации кнопка Hamburger не работает: IsPaneOpen="False" DisplayMode="Overlay". Код для кнопки Hamburger ясно ваниль - MainSplitView.IsPaneOpen = !MainSplitView.IsPaneOpen;

Markup:

<VisualStateManager.VisualStateGroups> 
     <VisualStateGroup> 
      <VisualState> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="721" /> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <Setter Target="MainSplitView.DisplayMode" Value="Inline" /> 
        <Setter Target="MainSplitView.IsPaneOpen" Value="True" /> 
       </VisualState.Setters> 
      </VisualState> 
      <VisualState> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="548" /> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <Setter Target="MainSplitView.DisplayMode" Value="CompactOverlay" /> 
        <Setter Target="MainSplitView.IsPaneOpen" Value="True" /> 
       </VisualState.Setters> 
      </VisualState> 
      <VisualState> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="0" /> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <Setter Target="MainSplitView.DisplayMode" Value="Overlay" /> 
        <Setter Target="MainSplitView.IsPaneOpen" Value="False" /> 
       </VisualState.Setters> 
      </VisualState> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 

    <RelativePanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
     <Button Name="HamBurgerButton" Background="Transparent" Padding="0,-6" Margin="12" Click="HamBurgerButton_Click"> 
      <FontIcon FontFamily="{ThemeResource ContentControlThemeFontFamily}" 
         Glyph="&#x2261;" FontSize="32" Margin="0,-8,0,0"/> 
     </Button> 
     <TextBlock RelativePanel.RightOf="HamBurgerButton" 
        Style="{ThemeResource TitleTextBlockStyle}" Margin="5,0,0,0" 
        Text="Title"/> 
     <SplitView x:Name="MainSplitView" PaneBackground="{ThemeResource ApplicationPageBackgroundThemeBrush}" 
        RelativePanel.AlignLeftWithPanel="True" RelativePanel.AlignRightWithPanel="True" 
        RelativePanel.Below="HamBurgerButton" OpenPaneLength="200" CompactPaneLength="50"> 
      <SplitView.Pane> 
       <StackPanel Orientation="Horizontal" Background="Gray"> 
        <AppBarButton x:Name="AboutButton" Icon="Important" IsCompact="True" Click="AboutButton_Click"/> 
        <TextBlock Text="About"/> 
       </StackPanel> 
      </SplitView.Pane> 
      <SplitView.Content> 
       <ScrollViewer VerticalScrollBarVisibility="Auto" VerticalScrollMode="Auto" 
           HorizontalScrollBarVisibility="Disabled" HorizontalScrollMode="Disabled"> 
        <Frame x:Name="ContentFrame"/> 
       </ScrollViewer> 
      </SplitView.Content> 
     </SplitView> 
    </RelativePanel> 

Так может кто-либо подтвердить, что эти проблемы могут быть воспроизведены в их конце (т.е. они являются ошибки), или Я где-то ошибаюсь или есть обходные пути?

ответ

0

Этот код будет работать ...

<RelativePanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <Button Name="HamBurgerButton" Background="Transparent" Padding="0,-6" Margin="12" Click="HamBurgerButton_Click"> 
     <FontIcon FontFamily="{ThemeResource ContentControlThemeFontFamily}" 
       Glyph="&#x2261;" FontSize="32" Margin="0,-8,0,0"/> 
    </Button> 
    <TextBlock RelativePanel.RightOf="HamBurgerButton" 
      Style="{ThemeResource TitleTextBlockStyle}" Margin="5,0,0,0" 
      Text="Title"/> 
    <SplitView x:Name="MainSplitView" IsPaneOpen="False" PaneBackground="{ThemeResource ApplicationPageBackgroundThemeBrush}" 
      RelativePanel.AlignLeftWithPanel="True" RelativePanel.AlignRightWithPanel="True" 
      RelativePanel.Below="HamBurgerButton" OpenPaneLength="200" CompactPaneLength="50"> 
     <SplitView.Pane> 
      <StackPanel Orientation="Horizontal" Background="Gray"> 
       <AppBarButton x:Name="AboutButton" Icon="Important" IsCompact="True" Click="AboutButton_Click"/> 
       <TextBlock Text="About"/> 
      </StackPanel> 
     </SplitView.Pane> 
     <SplitView.Content> 
      <ScrollViewer VerticalScrollBarVisibility="Auto" VerticalScrollMode="Auto" 
         HorizontalScrollBarVisibility="Disabled" HorizontalScrollMode="Disabled"> 
       <Frame x:Name="ContentFrame"/> 
      </ScrollViewer> 
     </SplitView.Content> 
    </SplitView> 
    <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup> 
      <VisualState> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="721" /> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <Setter Target="MainSplitView.DisplayMode" Value="Inline" /> 
        <Setter Target="MainSplitView.IsPaneOpen" Value="True" /> 
       </VisualState.Setters> 
      </VisualState> 
      <VisualState> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="548" /> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <Setter Target="MainSplitView.DisplayMode" Value="CompactOverlay" /> 
        <Setter Target="MainSplitView.IsPaneOpen" Value="True" /> 
       </VisualState.Setters> 
      </VisualState> 
      <VisualState> 
       <VisualState.StateTriggers> 
        <AdaptiveTrigger MinWindowWidth="0" /> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <Setter Target="MainSplitView.DisplayMode" Value="Inline" /> 
       </VisualState.Setters> 
      </VisualState> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 
</RelativePanel> 

Кнопка гамбургер не работает, когда ширина составляла от 0 до 548, потому что режим установлен для наложения ... на самом деле была открыта панель и закрылся за рамкой ... поэтому не было видно, что заставило вас думать, что кнопка не работает. Это не ошибка в splitview ... Если это не работает комментарий ... поможет вам ...

+0

Да, этот код действительно работает, спасибо и отметим это как ответ. Но еще одна необъяснимая вещь заключается в том, что я загрузил образцы UWP из Github и запускал образец 'XAMLResponsiveTechniques'. У этого есть режим Overlay для 0-> 548, и он отлично работает! Как вы указываете, есть ли какой-либо свойство' z-index', который сделает панель Overlay на кадре? – NP3

0

Я не думаю, что ваш Adaptive Trigger работает в конце концов. Поместите его внутри relativePanel и посмотрите, активируется ли он.

<RelativePanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <Button Name="HamBurgerButton" Background="Transparent" Padding="0,-6" Margin="12" Click="HamBurgerButton_Click"> 
     <FontIcon FontFamily="{ThemeResource ContentControlThemeFontFamily}" 
        Glyph="&#x2261;" FontSize="32" Margin="0,-8,0,0"/> 
    </Button> 
    <TextBlock RelativePanel.RightOf="HamBurgerButton" 
       Style="{ThemeResource TitleTextBlockStyle}" Margin="5,0,0,0" 
       Text="Title"/> 
    <SplitView x:Name="MainSplitView" PaneBackground="{ThemeResource ApplicationPageBackgroundThemeBrush}" 
       RelativePanel.AlignLeftWithPanel="True" RelativePanel.AlignRightWithPanel="True" 
       RelativePanel.Below="HamBurgerButton" OpenPaneLength="200" CompactPaneLength="50"> 
     <SplitView.Pane> 
      <StackPanel Orientation="Horizontal" Background="Gray"> 
       <AppBarButton x:Name="AboutButton" Icon="Important" IsCompact="True" Click="AboutButton_Click"/> 
       <TextBlock Text="About"/> 
      </StackPanel> 
     </SplitView.Pane> 
     <SplitView.Content> 
      <ScrollViewer VerticalScrollBarVisibility="Auto" VerticalScrollMode="Auto" 
          HorizontalScrollBarVisibility="Disabled" HorizontalScrollMode="Disabled"> 
       <Frame x:Name="ContentFrame"/> 
      </ScrollViewer> 
     </SplitView.Content> 
    </SplitView><VisualStateManager.VisualStateGroups> 
    <VisualStateGroup> 
     <VisualState> 
      <VisualState.StateTriggers> 
       <AdaptiveTrigger MinWindowWidth="721" /> 
      </VisualState.StateTriggers> 
      <VisualState.Setters> 
       <Setter Target="MainSplitView.DisplayMode" Value="Inline" /> 
       <Setter Target="MainSplitView.IsPaneOpen" Value="True" /> 
      </VisualState.Setters> 
     </VisualState> 
     <VisualState> 
      <VisualState.StateTriggers> 
       <AdaptiveTrigger MinWindowWidth="548" /> 
      </VisualState.StateTriggers> 
      <VisualState.Setters> 
       <Setter Target="MainSplitView.DisplayMode" Value="CompactOverlay" /> 
       <Setter Target="MainSplitView.IsPaneOpen" Value="True" /> 
      </VisualState.Setters> 
     </VisualState> 
     <VisualState> 
      <VisualState.StateTriggers> 
       <AdaptiveTrigger MinWindowWidth="0" /> 
      </VisualState.StateTriggers> 
      <VisualState.Setters> 
       <Setter Target="MainSplitView.DisplayMode" Value="Overlay" /> 
       <Setter Target="MainSplitView.IsPaneOpen" Value="False" /> 
      </VisualState.Setters> 
     </VisualState> 
    </VisualStateGroup> 
</VisualStateManager.VisualStateGroups> 
</RelativePanel> 
+0

Пробовал ... тот же результат! 1a и 1c остановились, но 1b и 2 - без изменений! – NP3

+0

Я также попытался понизить целевую версию из сборки 10586, чтобы построить 10240, но не повезло. – NP3

+0

проверить с атрибутами, указанными в xaml ... я имею в виду установить опцию ispaneopen в false или true в xaml. Когда min width> 0, он автоматически изменится. – Razor