【问题标题】:wpf usercontrol states, modifying heightwpf用户控件状态,修改高度
【发布时间】: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


    【解决方案1】:

    也许我找到了答案。现在它可以工作,但我正在努力理解这种变化。

    这里的视觉状态代码:

        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="VisualStateGroup">
                <VisualStateGroup.Transitions>
                    <VisualTransition GeneratedDuration="0"/>
                </VisualStateGroup.Transitions>
                <VisualState x:Name="Expanded">
                    <Storyboard>
                        <DoubleAnimation EnableDependentAnimation="True" Storyboard.TargetName="grid" Storyboard.TargetProperty="(FrameworkElement.Height)" From="0" To="366" Duration="0:0:0.600" />
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="Collapsed">
                    <Storyboard>
                        <DoubleAnimation EnableDependentAnimation="True" Storyboard.TargetName="grid" Storyboard.TargetProperty="(FrameworkElement.Height)" From="366" To="0" Duration="0:0:0.600" />
                    </Storyboard>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
    

    重要的一行是:

    <DoubleAnimation EnableDependentAnimation="True" Storyboard.TargetName="grid" Storyboard.TargetProperty="(FrameworkElement.Height)" From="366" To="0" Duration="0:0:0.600" />
    

    我发现它需要启用 EnableDependantAnimation。

    现在它可以作为一种魅力,但我不喜欢 FROM TO 设置。但它可能是我在这里能做的最好的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      • 2022-07-22
      • 2012-06-30
      • 1970-01-01
      相关资源
      最近更新 更多