2016-06-03 1 views
0

StackPanel에 탐색 버튼이 몇 개 있습니다.이 버튼을 splitview의 창 안에 넣고 싶습니다. splitview의 창을 열면 스택 패널의 방향이 수평이되며 창을 닫으면 스택 패널의 방향이 수직이되어 사용자는 항상 탐색 버튼을 볼 수 있습니다.UWP에서 적응 효과를 얻기 위해 visualstate에서 splitview의 창을 사용하는 방법은 무엇입니까?

   <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup x:Name="PaneViewStates"> 
      <VisualState x:Name="PaneClosedState"> 
       <VisualState.StateTriggers> 
        <StateTrigger IsActive="{Binding Path=IsPaneOpen, ElementName=SplitView, Converter={StaticResource BooleanNegationConverter}}"/> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <Setter Target="NavigationControl.RootGrid.StackPanel.Orientation" Value="Vertical"/> 
       </VisualState.Setters> 
      </VisualState> 
      <VisualState x:Name="PaneOpenState"> 
       <VisualState.StateTriggers> 
        <StateTrigger IsActive="{Binding Path=IsPaneOpen, ElementName=SplitView}"/> 
       </VisualState.StateTriggers> 
       <VisualState.Setters> 
        <Setter Target="NavigationControl.RootGrid.StackPanel.Orientation" Value="Horizontal"/> 
       </VisualState.Setters> 
      </VisualState> 
     </VisualStateGroup> 

을 다음 그러나 나는이 부착 특성과 같은 오류가 'IsPaneOpen' was not found in type 'SplitView'. I, 즉 OnPaneClosingOnPaneOpen 같은 이벤트를 사용하여 평면 B입니다있어 가지고 같이 XAML 코드는, 그러나 단지 PaneClosing 이벤트, 아니 열리는 이벤트가 . 나는 누군가가 어떤 제안을 할 수 있는지 궁금해.

+2

여기서는 StateTrigger를 사용하는 것이 좋지만 여기서는

+0

@AndreyAshikhmin 여전히 창이 열려 있거나 닫혀 있는지 여부와 상관없이 이벤트를 트리거하지 않습니다. 또한 NavigationControl.RootGrid.StackPanel.Orientation의 문제가 아닌지 확인하기 위해 다른 컨트롤의 가시성을 테스트했습니다. – litaoshen

+0

StackPanel의 이름을 지정하십시오. 'AdaptiveStackPanel'과 target을 다음과 같이 설정합니다 :'AdaptiveStackPanel.Orientation' –

답변

1

적응 형 트리거는 MinWidthMinHeight을 사용하여 트리거 조건을 확인합니다. 부울 조건을 검사하지 않습니다. StateTrigger을 사용하고 IsPaneOpenIsActive에 바인딩하여 "PaneOpenState"를 트리거해야합니다. 그러나 "PaneClosedState"를 트리거하려는 경우 인 StateTrigger에 직접 바인딩 할 수는 없습니다. 이 굉장한 WindowsStateTriggers처럼 StateTriggerBase 클래스에서 파생 된 다른 상태 트리거가 필요합니다. 위의 컬렉션에서 IsFalseStateTrigger을 사용하고 있습니다.

지적 우리의 친구 중 한 후, 내가 IsFalseStateTrigger를 사용하는이 작업을 수행 할 수있는 가장 확실한 방법을 대신 잊었 알게

<Page ... 
    xmlns:triggers="using:WindowsStateTriggers"> 
... 

<VisualState x:Name="PaneOpenState"> 
    <VisualState.StateTriggers> 
     <StateTrigger IsActive="{Binding IsPaneOpen, ElementName=MySplit}"/> 
    </VisualState.StateTriggers> 
    <VisualState.Setters> 
     <Setter Target="NavigationControl.RootGrid.StackPanel.Orientation" Value="Horizontal"/> 
    </VisualState.Setters> 
</VisualState> 
<VisualState x:Name="PaneClosedState"> 
    <VisualState.StateTriggers> 
     <triggers:IsFalseStateTrigger Value="{Binding ElementName=MySplit, Path=IsPaneOpen}" /> 
    </VisualState.StateTriggers> 
    <VisualState.Setters> 
     <Setter Target="NavigationControl.RootGrid.StackPanel.Orientation" Value="Vertical"/> 
    </VisualState.Setters> 
</VisualState> 

편집 :

코드는 같아야합니다 . NotTrueConverter과 같은 변환기를 사용하여 부울을 무효화하고 StateTrigger을 사용하여

+1

PaneClosedState에 일종의 NegBoolean 변환기를 사용하고 바인드하면 안됩니까? –

+0

@AndreyAshikhmin 죄송합니다. 가장 확실한 방법을 잊어 버렸습니다. 내 대답을 편집 할게. 감사 :) –

관련 문제