在Silverlight 4中执行此动画的最佳方法是什么?

时间:2010-11-03 19:44:13

标签: c# .net silverlight animation windows-phone-7

我正在Silverlight中构建一个Windows Phone 7应用程序。

我在ListBox中有一个内容列表。当用户按下按钮时,“删除”图标应出现在列表中的每个项目旁边。理想情况下,列表项会滑过,图标将被设置为动画。

我不确定这样做的最佳方法是什么。我对Silverlight中的动画不熟悉。一种方法:为ListBox创建一个包含图标和实际内容的数据模板。如果用户点击按钮,则切换图标的可见性。将事件处理程序附加到被点击的图标。 (我不确定如何将动画制作成这个。)

还是有另一种方法可以使这项工作吗?

更新:好的,我有一个很棒的动画,内容可以滑出来。但是,我想为列表中的每个项目添加一个图标。我怎么能这样做?

<VisualStateManager.CustomVisualStateManager>
            <ic:ExtendedVisualStateManager/>
        </VisualStateManager.CustomVisualStateManager>
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="EditingStates">
                <VisualStateGroup.Transitions>
                    <VisualTransition GeneratedDuration="0:0:1"/>
                </VisualStateGroup.Transitions>
                <VisualState x:Name="Editing">
                    <Storyboard>
                        <DoubleAnimation Duration="0" To="60" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="pivotItem" d:IsOptimized="True"/>
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="NotEditing">
                    <Storyboard>
                        <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="pivotItem" d:IsOptimized="True"/>
                    </Storyboard>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>

此外,现在这是硬编码为特定控件。如何将其更改为用户当前正在查看的pivotItem

2 个答案:

答案 0 :(得分:2)

这是VisualStates的“规范”案例 - 只需创建一个打开图标的状态和一个关闭图标的状态,然后在它们之间切换。状态之间的动画可以很容易地完成。我建议你使用Blend for WP7(免费)并查看此视频作为起点:

http://expression.microsoft.com/en-us/ee426922.aspx

修改

对于问题的第2部分,只需将图标添加到ItemTemplate,然后使用VS动画从外部滑动和/或增大(更改宽度/高度)。

您应该将VisualStates添加到ListBox中的项目模板中;通过这样做,您将能够在VS动画中引用控件和图标的正确实例。

答案 1 :(得分:1)

在列表框控件中使用故事板,如果您没有想法尝试使用表达式混合为Windows Phone 7,那么只需添加一个关键帧就像Adobe Flash一样。