2012-10-09 44 views
2

當您試圖爲某些DataTemplate輸入VisualStates時,這是很常見的問題。使用VisualStateManager的數據模板中的WPF動畫

下面的代碼工作正常,但只有當我使用FrameworkElement,如自定義UserControl

<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

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

然後我將「MyDataTemplate」應用於我的自定義元素(實現ContentTemplate依賴項屬性的類),並且在這種情況下我無法使用動畫狀態「聚焦」。

即使我會得到一個名爲 「rootgrid」 網格物體通過的VisualTree並使用此:

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

什麼也沒有發生... :(

的問題是如何使用VisualStates(動畫)實施?在DataTemplateFrameworkElement對象

+0

你找到解決這個?我想知道同樣的事情。也許它不可能使用數據模板的可視狀態? – McGarnagle

+0

也許我完全錯了,但我認爲有沒有簡單的方法來使用像Ellipse這樣的UIElement。所以你應該可以使用從Control繼承的類,並看看教程或文章之一如何使用它們。這就是我可以建議的,對不起。其實我沒有太多的WPF經驗,所以也許有人會告訴我們如何做到最好。 –

回答

0

答案很可能是太晚了OP,只是爲別人碰到這個問題絆腳石:

可以在DataTemplate中使用VisualStateManager。關鍵是呼叫VisualStateManager.GoToElementState而不是VisualStateManager.GoToStateFrameworkElement其中包含VisualStateManager

順便說一句,上述XAML不正確指定VisualState爲重點,這應改爲:

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