2

当您尝试输入VisualStates一些DataTemplate.

下面的代码可以正常工作,但前提是我使用 a FrameworkElement,例如 custom 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依赖属性的类),在这种情况下我不能使用动画状态“Focused”。

即使我通过 VisualTree 得到一个名为“rootgrid”的网格对象并使用它:

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

什么都没发生 ... :(

问题是如何为非对象使用VisualStates(动画)实现?DataTemplateFrameworkElement

4

1 回答 1

0

对于OP来说答案可能为时已晚,但对于其他偶然发现这个问题的人来说:

可以VisualStateManager在 a 中使用 a DataTemplate。关键是调用VisualStateManager.GoToElementState而不是VisualStateManager.GoToState使用FrameworkElement包含VisualStateManager.

顺便说一句,上面的 XAML 没有正确指定VisualStatefor Focused,这应该更改为:

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

等等

于 2014-05-23T10:58:49.603 回答