首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向上滑动的膨胀机控制

向上滑动的膨胀机控制
EN

Stack Overflow用户
提问于 2011-08-11 15:29:31
回答 3查看 2.8K关注 0票数 1

我试图构建一个动画效果,在屏幕底部按下一个“按钮”,会导致StackPanel的动画“向上滑动”--有点像在显示菜单时由应用程序条实现的幻灯片向上移动。

我在http://www.cespage.com/silverlight/tutorials/wp7tut24.html的示例中尝试了几种效果,它使用的动画如下:

代码语言:javascript
运行
复制
                            <VisualState x:Name="Expanded">
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetName="ContentScaleTransform"
                    Storyboard.TargetProperty="ScaleY" To="1" Duration="0"/>
                                    <DoubleAnimation Storyboard.TargetName="RotateButtonTransform"
                    Storyboard.TargetProperty="Angle" To="180" Duration="0"/>
                                </Storyboard>

然而,使用这个示例并不能给我想要的效果,因为内容容器的高度“跳跃”,即使内容缩放本身是动画的。

我也玩过动画的容器/内容高度:

代码语言:javascript
运行
复制
                                    <DoubleAnimation Storyboard.TargetName="Content"
                                                     Storyboard.TargetProperty="Height" To="200" Duration="0"/>

..。但是,由于高度是由StackPanel覆盖的(而且我不能使用MaxHeight,因为这不是动画的正确属性),所以这并不有效。

关于我应该做什么,有什么想法或建议吗?

注意-在任何人评论WP7设计指南之前.这是客户设计/规范,它似乎适合于Metro :)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-16 09:03:10

谢谢你的建议-我试了几件事.最后我说:

  • I将扩展器及其内容放置在一个容器(一个边框)
  • 中,我使用网格布局将该扩展器放置在屏幕上,
  • i动画TranslateTransform以将该扩展器滑动到屏幕上/下。

一些浓缩的代码:

代码语言:javascript
运行
复制
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="ViewStates">
                            <VisualStateGroup.Transitions>
                                <VisualTransition GeneratedDuration="0:0:0.5"/>
                            </VisualStateGroup.Transitions>
                            <VisualState x:Name="Expanded">
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetName="BorderTranslateTransform"
                                                     Storyboard.TargetProperty="Y" To="0" Duration="0"></DoubleAnimation>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Collapsed">
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetName="BorderTranslateTransform"
                                                     Storyboard.TargetProperty="Y" To="154" Duration="0"></DoubleAnimation>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>

                    <Border BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}"
                            CornerRadius="{TemplateBinding CornerRadius}"
                            Background="{TemplateBinding Background}"
                            Margin="0,0,0,0">
                        <Border.RenderTransform>
                            <TranslateTransform x:Name="BorderTranslateTransform"></TranslateTransform>
                        </Border.RenderTransform>
                        <Grid>
                            // stuff here
                        </Grid>
                    </Border>
票数 0
EN

Stack Overflow用户

发布于 2011-08-11 16:44:40

你能把边距动画化吗?

这不是一个依赖属性,因此它需要一些努力,但可以完成。(如果你需要的话,我有个例子。)

票数 1
EN

Stack Overflow用户

发布于 2011-08-12 10:26:17

这台机器上没有安装WP7 SDK,所以所有东西都来自内存。吃点盐吧。而且,我假设使用硬编码的大小是可以的(否则就会困难得多)。

首先,为了保持一致性,通过defalut使IsExpanded属性false

代码语言:javascript
运行
复制
public static readonly DependencyProperty IsExpandedProperty =
    DependencyProperty.Register("IsExpanded", typeof(bool),
    typeof(Expander), new PropertyMetadata(false));

在名为“ContentPresenter”的Height="0"上添加Height="0"

在名为“展开”的Storyboard of VisualState中,添加以下动画:

代码语言:javascript
运行
复制
<DoubleAnimation Storyboard.TargetName="Content"
                 Storyboard.TargetProperty="Height"
                 To="200"
                 Duration="0:0:1"/>

在名为“折叠”的Storyboard of VisualState中添加以下动画:

代码语言:javascript
运行
复制
<DoubleAnimation Storyboard.TargetName="Content"
                 Storyboard.TargetProperty="Height"
                 To="0"
                 Duration="0:0:1"/>

根据您的喜好调整动画的ToDuration属性。

对于内容的幻灯片动画,尝试删除正在运行"ContentScaleTransform“的动画。在这种情况下,这个动画会产生更多的“增长”或“拉伸”效果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7028625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档