2012-09-10 3 views
2

GridView itemtemplate에서 VisualStates를 사용할 수 있습니까? ItemContainerStyle ControlTemplate을 통해 VisualStates를 설정하면 VisualStates를 사용할 수 있지만 ContentPresenter를 포함하여 같은 레벨의 항목에만 액세스 할 수 있습니다. 내가하고 싶은 것은 콘텐츠 발표자 내부의 컨트롤의 배경색을 변경하는 것입니다. 어떤 효과가없는 것 같은 간단한 예가 있습니다.WinRT GridView의 시각적 상태 관리자 ItemTemplate

<GridView x:Name="ItemsGrid" ItemContainerStyle="{StaticResource StyleWhereVisualStatesWork}"> 
    <GridView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapGrid Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </GridView.ItemsPanel> 
    <GridView.ItemTemplate> //This Is Where I Can't Get Visual States To Work 
     <DataTemplate> 
      <Grid x:Name="ContainerGrid"> 
       <VisualStateManager.VisualStateGroups> 
        <VisualStateGroup x:Name="CommonStates"> 
         <VisualState x:Name="Normal"/> 
         <VisualState x:Name="PointerOver"> 
          <Storyboard> 
           <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="TestBackgroundGrid"> 
            <DiscreteColorKeyFrame KeyTime="0" Value="{StaticResource SomeBrush}"/> 
           </ColorAnimationUsingKeyFrames> 
          </Storyboard> 
         </VisualState> 
        </VisualStateGroup> 
       </VisualStateManager.VisualStateGroups> 
       <Grid x:Name="TestBackgroundGrid" Height="60" Width=60" Background="{StaticResource SomeStandardColourBrush}"> 
       </Grid> 
      </Grid> 
     </DataTemplate> 
    </GridView.ItemTemplate> 
</GridView> 

답변

0

정말 그렇습니다. ItemTemplate 기본 컨트롤은 마우스/포커스 이벤트 인 AFAIK를 처리하지 않습니다. 기본 컨트롤에 대한 템플릿의 복사본을 만들 수 있고 시각적 상태가 정의되지 않은 경우 새 템플릿을 정의하고 자동으로 호출 할 수 없습니다. 이 경우 항목 템플릿은 마우스/포커스/정보를 인식하지 못합니다. 이 모든 것을 확인할 시간은 없지만 99 %는 확실합니다.

+0

감사합니다. 제프, 당신이 옳을 거라 확신합니다. 내 ItemTemplate을 완전히 버리고 ItemContainer에있는 내용을 배치했습니다. ContentPresenter가 완전히 제거됩니다. 예상대로 작동하는 것 같습니다. 뭔가 다른 일을하고있는 것처럼 느껴진다. Item 템플릿을 가지고있는 점이 무엇인지는 모르겠지만, 그것이 작동한다면 .... – Oli

관련 문제