就在我认为我理解的时候VisualStateManager
,有些东西证明我错了.
我正在使用WPF 4,我试图简单地将鼠标放大,然后在鼠标离开时将其缩小.我想我只是在a中定义每个状态VisualStateGroup
然后VisualTransition
用a 指定a GeneratedDuration
:
<Border x:Name="PART_Root" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" RenderTransformOrigin="0.5,0.5">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup Name="CommonStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:1"/>
</VisualStateGroup.Transitions>
<VisualState Name="Normal"/>
<VisualState Name="MouseOver">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="scaleTransform" Storyboard.TargetProperty="ScaleX" To="1.5" Duration="0"/>
<DoubleAnimation Storyboard.TargetName="scaleTransform" Storyboard.TargetProperty="ScaleY" To="1.5" Duration="0"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border.RenderTransform>
<ScaleTransform x:Name="scaleTransform" ScaleX="1" ScaleY="1"/>
</Border.RenderTransform>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
Run Code Online (Sandbox Code Playgroud)
由于我有一个全能VisualTransition
的GeneratedDuration
,我期待VSM生成中间动画.也就是说,鼠标悬停在控件上应该在ScaleTransform
1秒内将属性设置为1到1.5.与mousing相同.相反,延迟1秒,然后ScaleTransform
属性立即捕捉到1.5或回到1.
如果我手动指定转换如下,那么我得到所需的行为:
<VisualStateGroup.Transitions>
<VisualTransition From="Normal" To="MouseOver">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="scaleTransform" Storyboard.TargetProperty="ScaleX" To="1.5" …
Run Code Online (Sandbox Code Playgroud)