2012-09-25 2 views
1

사용자 지정 컨트롤을 작성하고 페이지가 세로 또는 물리기 인 경우 다른 패딩을 사용하려고합니다. 나는 페이지가 다음 뷰 상태에 대한 지원을 생성하는 LayoutAwarePage에서 상속 것으로 나타났습니다 :사용자 지정 레이아웃 인식 컨트롤

  • FullScreenLandscape
  • FullScreenPortrait
  • 을 가득

내가 유사한 코드를 추가해야합니까 짤깍 소리를 내 새 컨트롤 (컨트롤에서 상속). 그렇지 않다면 왜 LayoutAwarePage가 이것을해야합니까? 또한, 다음 VisualStateManager를 컨트롤의 ControlTemplate에 스틱으로 고정시키고 페이지 레이아웃을 존중하도록 만들거나 너무 쉽습니다.

<VisualStateGroup x:Name="ApplicationViewStates"> 
    <VisualState x:Name="FullScreenLandscape"/> 
    <VisualState x:Name="Filled"/> 
    <VisualState x:Name="FullScreenPortrait"> 
     <Storyboard> 
      <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Padding"> 
       <DiscreteObjectKeyFrame KeyTime="0" Value="1,2,3,4"/> 
      </ObjectAnimationUsingKeyFrames> 
     </Storyboard> 
    </VisualState> 
    <VisualState x:Name="Snapped"> 
     <Storyboard> 
      <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Padding"> 
       <DiscreteObjectKeyFrame KeyTime="0" Value="5,6,7,8"/> 
      </ObjectAnimationUsingKeyFrames> 
     </Storyboard> 
    </VisualState> 
</VisualStateGroup> 

편집 : 컨트롤은 기본적으로 이러한 상태를 지원하지 않는 그들이 추가해야 할 것 같습니다. 또한 ButtonBase는 스타일로 사용하기 때문에 이러한 상태를 지원합니다.

답변

1

사용자 컨트롤은 LayoutAwarePage를 상속 받도록합니다. 다음으로 내용을 격자에 배치하고 VisualStateGroup을이 격자 안에 이동합니다. 희망이 도움이, 그것은 나를 위해 작동합니다.

2

Windows 8 프로젝트의 기본 "세부 정보"페이지를 보면 페이지의 이벤트를 구독 할 것으로 예상됩니다. 당신하여 flipview의 ItemTemplate 내에서 다음을 찾을 수 있습니다 :

<FlipView.ItemTemplate> 
    <UserControl Loaded="StartLayoutUpdates" Unloaded="StopLayoutUpdates"> 
     <ScrollViewer x:Name="scrollViewer" Style="{StaticResource HorizontalScrollViewerStyle}" 
      <!-- "Child Controls Here" --> 
       <VisualStateManager.VisualStateGroups> 
        <!-- "Visual states manuiplating the child controls above" --> 
      </VisualStateManager.VisualStateGroups> 
     </ScrollViewer> 
    </UserControl> 
</FlipView.ItemTemplate> 
+1

멋진 한 -이 실제로 정답 것으로 보인다. –