【问题标题】:Is there a way to set a delay for VisualState transition?有没有办法为 VisualState 转换设置延迟?
【发布时间】:2011-10-24 17:21:45
【问题描述】:

我希望我的控件在延迟一段时间后启动视觉状态转换动画。 我尝试在视觉状态故事板上设置 BeginTime。但它什么也没给:( 有没有办法做到这一点?

    <i:Interaction.Triggers>
     <i:EventTrigger EventName="Loaded" SourceObject="{Binding ElementName=controlRoot}">
        <ei:GoToStateAction StateName="MouseOverData"/>
     </i:EventTrigger>

     <i:EventTrigger EventName="MouseEnter" SourceObject="{Binding ElementName=textBlockChart}">
        <ei:GoToStateAction StateName="MouseOverCharts"/>
    </i:EventTrigger>
    <i:EventTrigger EventName="MouseLeave" SourceObject="{Binding ElementName=textBlockChart}">
        <ei:GoToStateAction StateName="Normal"/>
    </i:EventTrigger>
    <i:EventTrigger EventName="MouseEnter" SourceObject="{Binding ElementName=grid}">
        <ei:GoToStateAction StateName="MouseOverCharts"/>
    </i:EventTrigger>
    <i:EventTrigger EventName="MouseLeave" SourceObject="{Binding ElementName=grid}">
        <ei:GoToStateAction StateName="Normal"/>
    </i:EventTrigger>

     <i:EventTrigger EventName="MouseEnter" SourceObject="{Binding ElementName=textBlockData}">
        <ei:GoToStateAction StateName="MouseOverData"/>
    </i:EventTrigger>
    <i:EventTrigger EventName="MouseLeave" SourceObject="{Binding ElementName=textBlockData}">
        <ei:GoToStateAction StateName="Normal"/>
    </i:EventTrigger>
    <i:EventTrigger EventName="MouseEnter" SourceObject="{Binding ElementName=grid1}">
        <ei:GoToStateAction StateName="MouseOverData"/>
    </i:EventTrigger>
    <i:EventTrigger EventName="MouseLeave" SourceObject="{Binding ElementName=grid1}">
        <ei:GoToStateAction StateName="Normal"/>
    </i:EventTrigger>
</i:Interaction.Triggers>
<VisualStateManager.VisualStateGroups>
    <VisualStateGroup x:Name="CommonStates">
        <VisualStateGroup.Transitions>
            <VisualTransition GeneratedDuration="0:0:0.2" />
            <VisualTransition From="MouseOverCharts" GeneratedDuration="0:0:0.2" To="Normal">
                <VisualTransition.GeneratedEasingFunction>
                    <CircleEase EasingMode="EaseIn"/>
                </VisualTransition.GeneratedEasingFunction>
            </VisualTransition>
        </VisualStateGroup.Transitions>
        <VisualState x:Name="MouseOverCharts">
            <Storyboard>
              <ColorAnimation Duration="0" To="#FFEFE78A" Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.Color)" Storyboard.TargetName="textBlockChart" d:IsOptimized="True"/>
                <DoubleAnimation Duration="0" To="10" Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.BlurRadius)" Storyboard.TargetName="textBlockChart" d:IsOptimized="True"/>
                <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.ShadowDepth)" Storyboard.TargetName="textBlockChart" d:IsOptimized="True"/>
                <ColorAnimation Duration="0" To="#FFEFE78A" Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)" Storyboard.TargetName="textBlockChartContent" d:IsOptimized="True"/>
                <DoubleAnimation Duration="0" To="220" Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="grid" d:IsOptimized="True"/>
            </Storyboard>
        </VisualState>
        <VisualState x:Name="MouseOverData">
            <Storyboard BeginTime="0:0:10">
              <ColorAnimation BeginTime="0:0:5" Duration="0" To="#FFEFE78A" Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)" Storyboard.TargetName="textBlockDataContent" d:IsOptimized="True"/>
              <ColorAnimation BeginTime="0:0:5" Duration="0" To="#FFEFE78A" Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.Color)" Storyboard.TargetName="textBlockData" d:IsOptimized="True"/>
              <DoubleAnimation BeginTime="0:0:5" Duration="0" To="10" Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.BlurRadius)" Storyboard.TargetName="textBlockData" d:IsOptimized="True"/>
              <DoubleAnimation BeginTime="0:0:5" Duration="0" To="0" Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.ShadowDepth)" Storyboard.TargetName="textBlockData" d:IsOptimized="True"/>
              <DoubleAnimation BeginTime="0:0:5" Duration="0" To="220" Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="grid1" d:IsOptimized="True"/>
            </Storyboard>
        </VisualState>
        <VisualState x:Name="Normal"/>
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

谢谢。

【问题讨论】:

  • 你在正确的轨道上。你能发布你的故事板定义的xaml吗?使用故事板是正确的方法。
  • 发布了代码。你可以看到 MouseOverData 的视觉状态。

标签: silverlight animation visualstatemanager


【解决方案1】:

您可以在情节提要上使用 BeginTime 属性。

例子:

<Storyboard BeginTime="0:0:2">

</Storyboard>

MSDN

【讨论】:

    【解决方案2】:

    尝试在&lt;VisualTransition GeneratedDuration="0:0:0.2" /&gt; 中删除GeneratedDuration="0:0:0.2"

    【讨论】:

    • 不是很明显,但它有帮助。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2018-10-17
    • 2016-11-13
    • 2020-02-03
    • 1970-01-01
    • 2016-02-17
    • 2021-09-11
    • 2020-08-31
    • 1970-01-01
    相关资源
    最近更新 更多