2012-10-09 3 views
2

DataTemplate에 대해 VisualStates을 입력하면 꽤 일반적인 문제입니다.VisualStateManager를 사용하는 datatemplate에서의 WPF 애니메이션

아래 코드는 나는 그런 정의 UserControlFrameworkElement을 사용하는 경우에만 있지만, 잘 작동

:

<DataTemplate x:Key="MyDataTemplate"> 
    <Grid x:Name="rootgrid"> 
     ... Code the same as above... 
    </Grid> 
</DataTemplate> 

을 다음 :

<UserControl> 
    ...namespaces goes here... 

<Grid x:Name="rootgrid"> 
     <VisualStateManager.VisualStateGroups> 
      <VisualStateGroup x:Name="States"> 
       <Storyboard x:Key="Focused"> 
     <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="ellipse"> 
      <EasingColorKeyFrame KeyTime="0:0:0.1" Value="#FFE90B0B"/> 
     </ColorAnimationUsingKeyFrames> 
     </Storyboard> 
      </VisualStateGroup> 
     </VisualStateManager.VisualStateGroups> 

     <Ellipse x:Name="ellipse" 
       Width="26" 
       Height="26" 
       Fill="Yellow" 
       SnapsToDevicePixels="True" 
       Stretch="Fill" 
       Stroke="Black" 
       StrokeThickness="2"> 
      <Ellipse.RenderTransform> 
       <TransformGroup> 
        <ScaleTransform/> 
        <SkewTransform/> 
        <RotateTransform/> 
        <TranslateTransform/> 
       </TransformGroup> 
      </Ellipse.RenderTransform> 
     </Ellipse> 
    </Grid> 

</UserControl> 

하지만 DataTemplate의 코드를 붙여 넣기 할 때 "MyDataTemplate"을 사용자 정의 요소 (클래스, ContentTemplate 종속성 속성 구현)에 적용하고이 경우 "집중"애니메이션 상태를 사용할 수 없습니다.

나는 VisualTree을 통해 "rootgrid"라는 그리드 객체를 얻고 이것을 사용하더라도 :

VisualStateManager.GoToState(rootgrid,"Focused",true); 

아무런 변화가 없습니다 ... :(

질문이 구현 VisualStates (애니메이션)를 사용하는 방법입니다 ? 비 FrameworkElement 개체에 대한 DataTemplate

+0

당신이의 해결 되었습니까? 나는 똑같은 것을 궁금해하고 있었다. 데이터 템플릿에 시각적 상태를 사용할 수없는 경우가 있습니까? – McGarnagle

+0

어쩌면 완전히 잘못 생각한 것 같지만, Ellipse와 같은 UIElement를 사용하여 쉽게이 작업을 수행 할 수있는 방법이 없다고 생각합니다. 따라서 Control에서 상속받은 클래스를 사용하고 자습서 또는 기사 중 하나에서 해당 클래스를 사용하는 방법을 참조해야합니다. 그게 내가 조언 할 수있는 전부 야, 미안. 사실 WPF에서 많은 경험이 없으므로 아마도이 기능을 수행하는 방법을 누군가에게 알려줄 수 있습니다. –

답변

0

대답은 너무 늦게 영업 이익 아마,하지만 바로이 질문을 통해 보았 지 다른 사람을 위해 :

DataTemplateVisualStateManager을 사용할 수 있습니다. 키가 VisualStateManager을 포함하는 FrameworkElementVisualStateManager.GoToState 대신 VisualStateManager.GoToElementState을 호출합니다.

그런데

은, 위의 XAML이 제대로 집중을위한 VisualState를 지정하지 않는,이 변경되어야합니다

<VisualStateManager.VisualStateGroups> 
    <VisualStateGroup x:Name="States"> 
     <VisualState Name="Focused> 
      <StoryBoard>