【发布时间】:2014-04-29 21:13:34
【问题描述】:
我对 WPF 中的状态和动画有点困惑。
我想做一个用户控件。此用户控件将包含(在主网格内)2 个另一个网格。其中一个是标题,第二个是内容。如果用户单击标题,则内容将展开,否则将折叠。我想动画扩展(从标题向下滑动内容)。
基本上,我希望各州这样做(为了将来的目的)。问题是,如果我添加状态并且我使用带有转换的幻灯片效果,那么这个网格(内容网格)的内容也会被转换。所以我想使用状态来修改元素的高度。如果您只修改元素,则不会出现动画,它只会立即更改其高度。
层次结构如下:
--- 包装网格
------ 标题网格
--------- 标题内容
------ 内容网格
--------- 内容网格的内容(如按钮、标签等)
视觉状态看起来像:
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="VisualStateGroup">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:1"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="Expanded"/>
<VisualState x:Name="Collapsed">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Height)" Storyboard.TargetName="grid">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<x:Double>0</x:Double>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
对于通过各州修改高度来查看扩展和折叠网格有什么建议吗? 仅使用动画它就可以完美运行,但对我来说最好使用状态来实现,正如我所说的那样,以备将来之需。
【问题讨论】:
标签: wpf animation user-controls height states