我定义了以下视觉状态:
<VisualStateManager.VisualStateGroups>
<VisualStateGroup Name="EditStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:2"/>
</VisualStateGroup.Transitions>
<VisualState Name="Editing" />
<VisualState Name="Normal">
<Storyboard>
<ThicknessAnimation Storyboard.TargetName="ViewBorder" Storyboard.TargetProperty="Margin" To="0" Duration="0"/>
<DoubleAnimation Storyboard.TargetName="Header" Storyboard.TargetProperty="(FrameworkElement.LayoutTransform).(ScaleTransform.ScaleY)" To="0" Duration="0"/>
<ColorAnimation Storyboard.TargetName="EditBorder" Storyboard.TargetProperty="Background.Color" To="Red" Duration="0"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
DoubleAnimation
和ColorAnimation
正常工作,VisualStateManager
为他们生成过渡动画超过2秒。
但是,ThicknessAnimation
没有动画效果。相反,它会在过渡期结束时捕捉到结束值。
有没有办法让VisualStateManager
为它生成过渡,或者我将被迫提供手动过渡?
答案 0 :(得分:2)
我分析了问题并启动了.NET Reflector,发现VisualStateManager
仅支持以下动画:
它有点蹩脚,因为它没有在任何地方记录。
要证明它无法生成动画,请查看VisualStageManager.GenerateToAnimation
方法的反转代码。还有VisualStageManager.GenerateFromAnimation
支持相同的动画子集。
private static Timeline GenerateToAnimation(FrameworkElement root, Timeline timeline, IEasingFunction easingFunction, bool isEntering)
{
Timeline destination = null;
if (destination == null)
{
var targetColor = GetTargetColor(timeline, isEntering);
if (targetColor.HasValue)
destination = new ColorAnimation { To = targetColor, EasingFunction = easingFunction };
}
if (destination == null)
{
var targetDouble = GetTargetDouble(timeline, isEntering);
if (targetDouble.HasValue)
destination = new DoubleAnimation { To = targetDouble, EasingFunction = easingFunction };
}
if (destination == null)
{
var targetPoint = GetTargetPoint(timeline, isEntering);
if (targetPoint.HasValue)
destination = new PointAnimation { To = targetPoint, EasingFunction = easingFunction };
}
if (destination != null)
CopyStoryboardTargetProperties(root, timeline, destination);
return destination;
}
Bottomline ...您只能在VisualStageManager中使用Color,Double或Point动画。如果你需要别的东西,可以恢复老式的触发器......
答案 1 :(得分:0)
也许您的ThicknessAnimation语句未完成,我在主题“ThicknessAnimation Class”中搜索来自MSDN的流动代码示例。
<ThicknessAnimation
Storyboard.TargetProperty="BorderThickness"
Duration="0:0:1.5" FillBehavior="HoldEnd" From="1,1,1,1" To="28,14,28,14" />
希望这可以帮助你...