2016-12-22 8 views
0

다음 정의는 GridView, SelectionMode "단일"에 대해 ItemContainer 스타일로 사용됩니다. 요소가 선택되면 특정 글리프가 선택을 나타 내기 위해 표시됩니다.VisualStateManager가 원래 상태로 되돌아 가지 않음

그것은 바로 윈도우 8.1과 함께 작동하지만, UWP와 함께,이 상태 변경을 받아 들인다 : 선택 변경에 선택한 표시하는 문양을 만드는,하지만 원래 상태 (상태 선택하지 않은 )로 복귀하지 않는이, 문양, 유지 SelectionChanged 이벤트는 이전 항목을 제거 된 항목으로 가져옵니다.

비슷한 문제가 (같은 프레스을 집중), 난 그냥 단순의 전체 VisualStateManager를 표시하지 않는 다른 국가를 위해 존재한다.

<Style x:Key="MyItemContainerStyle" TargetType="SelectorItem"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="SelectorItem"> 
       <Border> 
        <Grid> 
         <!-- Layout of the grid --> 
        </Grid> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="SelectionStates"> 
          <VisualState x:Name="Unselected" /> 
          <VisualState x:Name="SelectedUnfocused"> 
           <Storyboard> 
            <DoubleAnimation Storyboard.TargetName="SelectingGlyph" 
                Storyboard.TargetProperty="Opacity" 
                To="1" 
                Duration="0" /> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="Selected"> 
           <Storyboard> 
            <DoubleAnimation Storyboard.TargetName="SelectingGlyph" 
                Storyboard.TargetProperty="Opacity" 
                To="1" 
                Duration="0" /> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<VisualState x:Name="Unselected"> 
    <Storyboard> 
     <DoubleAnimation Storyboard.TargetName="SelectingGlyph" 
         Storyboard.TargetProperty="Opacity" 
         To="0" 
         Duration="0" /> 
    </Storyboard> 
</VisualState> 

을 시도했지만 도움이되지 않았다.

+1

시각 상태 그룹 및 시각 상태 이름이 정확합니까? https://msdn.microsoft.com/en-us/library/windows/apps/mt299136.aspx –

답변

0

게시 한 코드에 따르면 Windows 8.1에서 정의한 VisualStateGroupVisualState이 사용 된 것으로 보입니다. 그러나 UWP에서는 이러한 VisualState이 변경되었습니다.

GridViewItem styles and templates에는 컨트롤의 기본 스타일로 정의 된 모든 VisualState가 나열됩니다. 보시다시피, UWP에는 "SelectionStates"VisualStateGroup이없고 "Unslected"VisualState도 없습니다. 따라서 코드는 UWP에서 작동하지 않습니다.

문제를 해결하려면 UWP에 사용 된 새로운 GridViewItem styles and templates에 따라 스타일을 다시 작성하는 것이 좋습니다. 그리고 새로운 스타일에서 "보통"및 "선택된" "시각적 상태는 동일한 시각적 상태 그룹에 있습니다. 따라서 "Selected"에서 "SelectingGlyph"를 표시하고 다음과 같이 "Normal"로 숨길 수 있습니다.

<VisualState x:Name="Normal"> 
    <Storyboard> 
     <DoubleAnimation Storyboard.TargetName="SelectingGlyph" 
         Storyboard.TargetProperty="Opacity" 
         To="0" 
         Duration="0" /> 
     <PointerUpThemeAnimation Storyboard.TargetName="ContentPresenter" /> 
    </Storyboard> 
</VisualState> 
... 
<VisualState x:Name="Selected"> 
    <Storyboard> 
     <DoubleAnimation Storyboard.TargetName="SelectingGlyph" 
         Storyboard.TargetProperty="Opacity" 
         To="1" 
         Duration="0" /> 
     ... 
    </Storyboard> 
</VisualState>