Silverlight:在可见和不可见状态之间添加可视过渡

时间:2010-12-03 14:10:35

标签: silverlight visibility transition

我想在可见性可以改变的控件上添加视觉效果(例如淡入,淡出)。

我不知道从哪里开始这样做。我已经阅读了一些关于VisualStateManager和VisualTransform的内容,但我仍然不知道它是否可行以及该怎么做。你能救我吗?

由于

1 个答案:

答案 0 :(得分:6)

你想要的是什么。

您需要VisualStateManager来定义ShowStateHideState。这些又定义了Storyboard来控制可见性。

然后致电

VisualStateManager.GoToState(uiElement, "ShowState", true);

在你的元素上用动画发送到“ShowState”。用“HideState”替换状态名称将隐藏元素。

我们用于VisualStateManager的XAML如下所示。它也会激活不透明度,因此会有淡入/淡出。

    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="VisualStates">
            <VisualState x:Name="ShowState">
                <Storyboard>
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot"
                                                   Storyboard.TargetProperty="(UIElement.Opacity)">
                        <EasingDoubleKeyFrame KeyTime="00:00:01"
                                              Value="1" />
                    </DoubleAnimationUsingKeyFrames>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot"
                                                   Storyboard.TargetProperty="(UIElement.Visibility)">
                        <DiscreteObjectKeyFrame KeyTime="00:00:00">
                            <DiscreteObjectKeyFrame.Value>
                                <Visibility>Visible</Visibility>
                            </DiscreteObjectKeyFrame.Value>
                        </DiscreteObjectKeyFrame>
                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
            </VisualState>
            <VisualState x:Name="HideState">
                <Storyboard>
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot"
                                                   Storyboard.TargetProperty="(UIElement.Opacity)">
                        <EasingDoubleKeyFrame KeyTime="00:00:01"
                                              Value="0" />
                    </DoubleAnimationUsingKeyFrames>
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot"
                                                   Storyboard.TargetProperty="(UIElement.Visibility)">
                        <DiscreteObjectKeyFrame KeyTime="00:00:01">
                            <DiscreteObjectKeyFrame.Value>
                                <Visibility>Collapsed</Visibility>
                            </DiscreteObjectKeyFrame.Value>
                        </DiscreteObjectKeyFrame>
                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>

注意这些上的KeyTime值可能需要针对您的应用进行调整。再看一遍,我看到“HideState”时间都是0,这可能无法给你想要的效果。 AnthonyWJones可能在我们的申请中发现错误!