Windows Store App 过渡动画
Windows Store App 过渡动画
在开发Windows应用商店应用程序时,如果希望界面元素进入或者离开屏幕时显得自然和流畅,可以为其添加过渡动画。过渡动画能够及时地提示用户屏幕所发生的变化,不会让用户觉得元素的位置变化过于突然。下面通过一个示例介绍如何为界面中的文本块添加过渡动画。
在一个打开的Windows应用商店项目中新建一个空白页,并命名为TransitionAnimationPage,双击打开此页面的TransitionAnimationPage.xaml文件,在Grid元素中添加如下代码。
<TextBlock Text="过渡动画" FontSize="50">
<TextBlock.Transitions>
<TransitionCollection>
</TransitionCollection>
</TextBlock.Transitions>
</TextBlock>
在上面的代码中,添加了一个用于实现过渡动画的文本块,通过Text属性将其本文内容设置为“过渡动画”,并使用FontSize属性设置字体的大小为50像素。接着在TextBlock.Transitions元素中添加一个TransitionCollection元素作为文本块的过渡动画集合,并在其中添加了一个EntranceThemeTransition动画,此动画可以使TextBlock文本块在进入屏幕时产生位置过渡的动画效果。
运行此页面,可以看到添加了过渡动画的文本块会在水平方向上从右向左划入屏幕。动画效果如图10-2所示。

图 10-2 过渡动画效果图1
从图10-2中可以看到,动画开始时,文本块会沿着箭头的指向滑入屏幕,经过短暂的时间后会停在屏幕中的某一位置,而具体停在什么位置可以根据文本块的Margin属性值来确定,在本示例中并没有设置文本块的Margin属性值,因此文本块会默认停在屏幕的左上角。除此之外,读者需要注意的是,如果为最外层的Grid元素添加过渡动画,那么其中的所有子元素都会有过渡动画效果,读者可以根据实际开发中具体情况选择为恰当的元素添加过渡动画。
前面介绍的EntranceThemeTransition动画对象中包含了可以控制动画效果的FromHorizontalOffset和FromVerticalOffset属性,通过指定这两个属性的值可以控制界面元素的起始位置相对于目标位置在水平和竖直方向上的偏移量,使添加过渡动画的界面元素以预想的轨迹进入屏幕。
下面再次回到之前添加的TransitionAnimationPage页面,双击打开TransitionAnimationPage.xaml文件,指定文本块在屏幕上的滑动距离,代码如下所示:
<TextBlock Text="过渡动画" FontSize="50">
<TextBlock.Transitions>
<TransitionCollection>
<EntranceThemeTransition FromHorizontalOffset="500" FromVerticalOffset="500"/>
</TransitionCollection>
</TextBlock.Transitions>
</TextBlock>
以上代码在原来的基础上又将EntranceThemeTransition动画对象的FromHorizontalOffset和FromVerticalOffset属性值分别设置为500像素,以指定文本块在水平方向与竖直方向的滑动距离。
运行此页面,屏幕上产生的过渡动画效果如图10-3所示。

图10-3过渡动画效果图2
从图10-3中可以看到,动画开始时文本块会沿着箭头的指向滑入屏幕,这与前一个过渡动画示例相比,文本块的位置变化显得更加醒目。
至此已经介绍了如何为单一的TextBlock文本块添加过渡动画,除此之外,还可以为对象容器添加过渡动画,这样在对象容器中的所有子对象将会产生更加有趣的动画效果。下面通过一个示例讲解如何为对象容器添加过渡动画效果。
在一个打开的Windows应用商店项目中新建一个空白页,并命名为EntranceThemeTransitionPage,双击打开此页面的EntranceThemeTransitionPage.xaml文件,在原有的Grid元素中添加如下代码。
<ItemsControl.Items>
<Ellipse Fill= "Yellow" Width="100" Height="100" Margin="10"/>
<Ellipse Fill=" Yellow" Width="100" Height="100" Margin="10"/>
<Ellipse Fill=" Yellow" Width="100" Height="100" Margin="10"/>
<Ellipse Fill=" Yellow" Width="100" Height="100" Margin="10"/>
</ItemsControl.Items>
<ItemsControl.ItemContainerTransitions>
<TransitionCollection>
<EntranceThemeTransitionFromHorizontalOffset="100" FromVerticalOffset="200"/>
</TransitionCollection>
</ItemsControl.ItemContainerTransitions>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapGrid Height="300"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
在上面的代码中,添加了一个ItemsControl元素,此元素作为对象容器,通过ItemsControl.Items元素向其中添加了4个宽和高分别为100像素的Ellipse元素。接着又在对象容器的ItemsControl.ItemContainerTransitions元素中添加一个TransitionCollection元素作为过渡动画集合,并在其中添加了一个EntranceThemeTransition动画对象,这样对象容器中的所有Ellipse元素就都可以产生过渡动画效果。又将EntranceThemeTransition动画对象的FromHorizontalOffset和FromVerticalOffset属性值分别设置为100和200像素,以调节对象容器中每个Ellipse元素的移动方向和距离。最后在ItemsControl.ItemsPanel元素中添加一个ItemsPanelTemplate元素,并在ItemsPanelTemplate元素中添加一个WrapGrid元素,通过此元素的Height属性设置容器对象中所有子对象在竖直方向上的布局范围为300像素。
运行此页面,可以看到对象容器中的椭圆会一个接一个的显示在屏幕中。动画效果如图10-4所示。

图 10-4 将过渡动画用于多个控件上的动画效果图
上面的示例只是实现了椭圆进入屏幕的开场动画效果,如果希望对象容器中的子对象位置发生更改时会产生重新调整位置的动画效果,需要将RepositionThemeTransition动画应用到包含多个子对象的对象容器中。下面的示例为对象容器中的每个矩形都添加了RepositionThemeTransition动画,若删除容器中的一个矩形,其他的矩形将重新调整到新的合理位置。
在一个打开的Windows 应用商店项目中新建一个空白页,并命名为RepositionThemeTransitionPage,双击打开此页面的RepositionThemeTransitionPage.xaml文件,在Grid元素中添加如下代码。
<ItemsControl x:Name ="MyItemsControl">
<ItemsControl.Items>
<Rectangle Fill="Red" Width="100" Height="100" Margin="10"/>
<Rectangle Fill="Red" Width="100" Height="100" Margin="10"/>
<Rectangle Fill="Red" Width="100" Height="100" Margin="10"/>
<Rectangle Fill="Red" Width="100" Height="100" Margin="10"/>
</ItemsControl.Items>
<ItemsControl.ItemContainerTransitions>
<TransitionCollection>
<!--如果没有这个部分,当有项被删除时不会有动画效果-->
<RepositionThemeTransition/>
</TransitionCollection>
</ItemsControl.ItemContainerTransitions>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapGrid Height="300"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
<Button Content="删除矩形" Click="RemoveButton_Click" Margin="50,200,0,0"/>
上述代码的实现与之前讲解的示例代码类似,同样是需要添加一个对象容器,不同的是,本示例在后台代码中调用了RemoveAt方法对容器中的子对象执行了删除操作,因此将代表对象容器的ItemsControl元素命名为MyItemsControl,这样即可通过此名称调用RemoveAt方法来删除容器中的一个Rectangle元素。接着在ItemsControl.Items元素中添加4个宽高分别为100像素的Rectangle元素,并在此容器的ItemsControl.ItemContainerTransitions元素中添加一个TransitionCollection元素作为过渡动画集合,其中添加了一个RepositionThemeTransition动画对象,这样对象容器中的每个Rectangle元素都可以产生重新调整位置的过渡动画效果。然后在ItemsControl.ItemsPanel元素中添加一个ItemsPanelTemplate元素,在ItemsPanelTemplate元素中添加一个WrapGrid元素,通过此元素的Height属性设置容器对象中所有子对象在竖直方向的活动范围为300像素。最后在界面上添加一个按钮,并为其Click事件定义一个名为“RemoveButton_Click”的事件处理方法,以实现删除容器中矩形的操作。
接下来在后台代码中为“删除矩形”按钮添加事件处理方法RemoveButton_Click,当单击此按钮时,会删除对象容器中的一个矩形,代码如下所示:
private void RemoveButton_Click(object sender, RoutedEventArgs e)
{
if (MyItemsControl.Items.Count > 0)
{
MyItemsControl.Items.RemoveAt(0);
}
}
方法通过if语句判断对象容器中是否存在矩形,如果存在,那么每单击一次按钮就会删除一个矩形,与此同时对象容器中剩余的矩形将会产生重新调整位置的动画效果。
除了上面介绍的过渡动画以外,还有其他类型的过渡动画。在进行界面元素的添加、删除和重新排列等操作时,也可以使用下面的过渡动画。
q AddDeleteThemeTransition,在控件中的子对象或内容增减时提供过渡动画。
q ContentThemeTransition,在控件内容被更改的情况下提供过渡动画。
q ReorderThemeTransition,在列表形式的控件中,每个列表项通过拖放改变其顺序后产生的过渡动画,不同的控件和主题可能具有不同的动画效果。
通过前面的示例,也许读者已经注意到了为控件添加过渡动画效果其实就是向过渡动画集合TransitionCollection中加入相应的动画,如果要实现多种过渡动画效果,可以向TransitionCollection动画集合中同时添加多个动画。然而并不是所有的情形都适合使用过渡动画,如果过渡动画效果不能满足应用的需求,可以添加即将在下一节中介绍的演示图板动画。
Windows Store App 过渡动画的更多相关文章
- Windows Store App 关键帧动画
关键帧动画和插值动画类似,同样可以根据目标属性值的变化产生相应的动画效果,不同的是,插值动画是在两个属性值之间进行渐变,而关键帧动画打破了仅通过两个属性值控制动画的局限性,它可以在任意多个属性值之间进 ...
- Windows Store App 插值动画
插值动画支持DoubleAnimation.ColorAnimation和PointAnimation类型的动画.其中比较常用的是DoubleAnimation动画,它可以用来控制界面元素的Doubl ...
- Windows Store App 主题动画
Windows 8系统的动画库中包含了丰富的主题动画,在开发Windows应用商店应用时,使用主题动画编写较少的代码即可实现所期望的动画效果.下面介绍一些常用的主题动画,读者可以根据每种主题动画提供的 ...
- 在桌面程序上和Metro/Modern/Windows store app的交互(相互打开,配置读取)
这个标题真是取得我都觉得蛋疼..微软改名狂魔搞得我都不知道要叫哪个好.. 这边记录一下自己的桌面程序跟windows store app交互的过程. 由于某些原因,微软的商店应用的安全沙箱导致很多事情 ...
- Windows store app[Part 4]:深入WinRT的异步机制
接上篇Windows store app[Part 3]:认识WinRT的异步机制 WinRT异步机制回顾: IAsyncInfo接口:WinRT下异步功能的核心,该接口提供所有异步操作的基本功能,如 ...
- Windows store app[Part 3]:认识WinRT的异步机制
WinRT异步机制的诞生背景 当编写一个触控应用程序时,执行一个耗时函数,并通知UI更新,我们希望所有的交互过程都可以做出快速的反应.流畅的操作感变的十分重要. 在连接外部程序接口获取数据,操作本地数 ...
- 05、Windows Store app 的图片裁切(更新)
在 Win Phone Silverlight api 中,有一个 PhotoChooserTask 选择器,指定宽.高属性,在选择图片的时候, 可以进行裁切,代码: PhotoChooserTask ...
- 01、Windows Store APP 设置页面横竖屏的方法
在 windows phone store app 中,判断和设置页面横竖屏的方法,与 silverlight 中的 Page 类 不同,不能直接通过 Page.Orientation 进行设置.而是 ...
- Windows store app[Part 1]:读取U盘数据
Windows 8系统下开发App程序,对于.NET程序员来说,需要重新熟悉下类库. 关于WinRT,引用一张网上传的很多的结构图: 图1 针对App的开发,App工作在系统划定的安全沙箱内,所以通过 ...
随机推荐
- 在CentOS 7上安装Node.js的4种方法
一.源码安装 1.下载源码(官网查看最新版本链接) wget http://nodejs.org/dist/v0.10.30/node-v0.10.30.tar.gz 2.解压源码 tar xzvf ...
- 开发环境中biztalk项目设置注意事项(转)
适用版本:biztalk 2006 适用环境:开发测试环境 在开发过程中,在开发环境中,一定会是一个对项目不断的修改.编译.部署.测试,查看测试结果,发现有问题,然后回到开发环境再修改.编译.部署 ...
- 修改 window.setTimeout,使之可以传递参数和对象参数
/* 功能:修改 window.setTimeout,使之可以传递参数和对象参数 使用方法: setTimeout(回调函数,时间,参数1,,参数n) */ var _setTimeout=setTi ...
- mysql数据库的主从
1. Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容; 2. Master 接收到来自 Slave 的 IO 线程的请求后,通过负责 ...
- apache+php+mysql的配置(转载)
windows: 按http://jingyan.baidu.com/article/fcb5aff797ec41edaa4a71c4.html的安装 按http://www.jb51.net/art ...
- 接口测试之HttpClient
HttpClient使用详解 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客 ...
- Tomcat connector元素常用配置(最大连接数等)
在tomcat的server.xml中有类似: <Connector port=" minSpareTHreads=" URIEncoding="gbk" ...
- 隐式意图Intent
在我们想往下一个页面传递数据时,要想到显式意图和隐式意图,显示意图用于内部活动跳转时比较方便,而隐式意图用于应用程序中外部活动的跳转时较为方便,在使用隐式意图时我们要想到清单文件 代码如下: < ...
- 20个Linux服务器安全强化建议(一)
Linux服务器安全对于保护用户数据.知识产权非常重要,同时还能减少你面对黑客的时间.在工作中,通常由系统管理员对Linux的安全负责,在这篇文章中,介绍了20条对Linux系统进行强化的建议.本文所 ...
- [Python正则表达式] 字符串中xml标签的匹配
现在有一个需求,比如给定如下数据: 0-0-0 0:0:0 #### the 68th annual golden globe awards #### the king s speech earns ...