【WIN10】Storyboard動畫板
源碼下載:http://yunpan.cn/cFJR5zcMNtBq6 访问密码 ac7a
使用Storyboard可以實現動畫效果。
1.仿照WINDOWS系統安裝時的等待畫面,不停更換背景顏色
<Button x:Name="testBtn" Content="Button" HorizontalAlignment="Left" Margin="62,29,0,0" VerticalAlignment="Top" Height="53" Width="234">
<Button.Background>
<SolidColorBrush x:Name="testBtnBack" Color="Black">
</SolidColorBrush>
</Button.Background>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Loaded">-----控件一加載就跑一個動畫
<BeginStoryboard>-----------表示開始執行
<Storyboard -----真正的動畫板
RepeatBehavior="Forever"--------無限循環
AutoReverse="True"------------自動反向變換,即動畫從A->B,後再B->A。
>
<ColorAnimation
From="Red"-----------------------------|從紅色變到綠色,可以使用Binding, Converter分配一個隨機顏色
To="Blue" -----------------------------|
Duration="0:0:2" -------------------------變換時間,H:M:S,可以使用小數。
Storyboard.TargetName="testBtnBack" --------------這裡是應用於哪個控件
Storyboard.TargetProperty="Color" --------------屬性
/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
以上這段XAML代碼就實現了背景顏色從RED變化到BLUE的簡單動畫。
這個例子中,我們使用了單幀動畫 ColorAnimation ,Color 代表是屬性的類型,如上圖中,背景顏色屬性類型為Color,Animation代表動畫,所以這個東東就表示是一個顏色變化的單幀動畫。
2.單幀動畫
下面列出單幀動畫:
| DoubleAnimation | 屬性類型為Double或int的動畫。 |
| PointAnimation | 屬性類型為Point的動畫。 |
| ColorAnimation | 屬性類型為Color的動畫。 |
比如DoubleAnimation,我們可以改變字體大小,改變寬度,高度等等。
所以要改變控件的位置,XAML不支持使用Margin.Top這樣的屬性。必須使用RenderTransform。舉例說明,實現一個球上下彈動的效果:
<Ellipse x:Name="ball" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="52" Margin="45,226,0,0" Stroke="Black" VerticalAlignment="Top" Width="52" RenderTransformOrigin="0.5,0.5">
<Ellipse.RenderTransform>-------------這裡要使用Render
<TranslateTransform />
</Ellipse.RenderTransform>
<Ellipse.Triggers>
<EventTrigger RoutedEvent="Ellipse.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimationUsingKeyFrames ------多幀,稍後討論。
Storyboard.TargetName="ball"
Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.Y)"------改變Y的位置。
Duration="0:0:2"
RepeatBehavior="Forever"
EnableDependentAnimation="True"------這個玩意一定要設置為真。。
AutoReverse="True" >
<EasingDoubleKeyFrame KeyTime="0:0:2" Value="240"> -----這種屬性多幀類型,稍後討論。
<EasingDoubleKeyFrame.EasingFunction>
<BackEase EasingMode="EaseOut" />
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard> </BeginStoryboard>
</EventTrigger>
</Ellipse.Triggers>
</Ellipse>
3.多幀動畫
| DoubleAnimationUsingKeyFrames | 全部使用Double類型單幀的動畫。 | |
| - DiscreteDoubleKeyFrame | 馬上變化,沒有漸變效果。如寬度從0到200,直接就變化到200,有一個跳變,一般會感覺比較突兀。 | |
| - LinearDoubleKeyFrame | 變化是線性變化效果,如寬度從0到200,是從0到10,到20,到50,再到200,有一個緩慢變化效果。 | |
| - SplineDoubleKeyFrame |
貝塞爾曲線,具體可以查看貝塞爾曲線的定義,再進行理解。 |
|
| - EasingDoubleKeyFrame |
緩動變化效果。 具體請參照博客:http://www.cnblogs.com/xwlyun/archive/2012/09/11/2680579.html |
|
| PointAnimationUsingKeyFrames | 全部使用Point類型單幀的動畫。 | |
| ColorAnimationUsingKeyFrames | 全部使用Point類型單幀的動畫。 | |
| ObjectAnimationUsingKeyFrames | 可以使用任意類型單幀的動畫。 | |
所要說明的是,每一種子幀類型都有4種,即Discrete、Linear、Spline、Easing。如,PointAnimationUsingKeyFrames就會有DiscretePointKeyFrame、LinearPointKeyFrame、SplinePointKeyFrame、EasingPointKeyFrame。
而ObjectAnimationUsingKeyFrames只能使用DeiscreteObjectKeyFrame,以及系統自定義主題動畫。待會再介紹這個東東。
DeiscreteObjectKeyFrame這個玩意可以使用任意類型,即不局限於double、color、point,但是你也看到了,它是使用Deiscrete,所以它只能立即改變。
每一個子幀都有 KeyTime、Value兩個屬性。
KeyTime即為顯示該幀的時間,Value即在DoubleAnimationUsingKeyFrames中設定的屬性的值。
好了,我寫了一個BUTTON,可以任意跳轉位置,而且可以轉換長度:
<Button x:Name="widthButton" Content="Button" HorizontalAlignment="Left" Height="100" Margin="251,413,0,0" VerticalAlignment="Top" Width="124">
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimationUsingKeyFrames EnableDependentAnimation="True" Duration="0:0:2" RepeatBehavior="Forever" AutoReverse="True" Storyboard.TargetName="widthButton" Storyboard.TargetProperty="Width">
<LinearDoubleKeyFrame KeyTime="0" Value="100" />
<LinearDoubleKeyFrame KeyTime="0:0:1" Value="200" />
<LinearDoubleKeyFrame KeyTime="0:0:2" Value="300" />
</DoubleAnimationUsingKeyFrames> <ObjectAnimationUsingKeyFrames EnableDependentAnimation="True" Duration="0:0:9" RepeatBehavior="Forever" AutoReverse="True" Storyboard.TargetName="widthButton" Storyboard.TargetProperty="Margin">
<DiscreteObjectKeyFrame KeyTime="0" Value="0,100,0,0" />
<DiscreteObjectKeyFrame KeyTime="0:0:1" Value="100,100,0,0" />
<DiscreteObjectKeyFrame KeyTime="0:0:2" Value="100,100,100,0" />
<DiscreteObjectKeyFrame KeyTime="0:0:3" Value="0,200,100,0" />
<DiscreteObjectKeyFrame KeyTime="0:0:4" Value="300,100,100,0" />
<DiscreteObjectKeyFrame KeyTime="0:0:5" Value="0,400,100,0" />
<DiscreteObjectKeyFrame KeyTime="0:0:6" Value="10,400,100,0" />
<DiscreteObjectKeyFrame KeyTime="0:0:7" Value="90,160,100,0" />
<DiscreteObjectKeyFrame KeyTime="0:0:8" Value="28,10,100,0" />
<DiscreteObjectKeyFrame KeyTime="0:09" Value="244,100,0,0" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
4.系統主題動畫。
| API | 描述 |
|---|---|
| AddDeleteThemeTransition | 为控件添加或删除子对象或内容的情形提供动画的过渡表现方式。通常,控件是项目容器。 |
| ContentThemeTransition | 为控件的内容更改时的情形提供动画的过渡表现方式。可以在应用 AddDeleteThemeTransition 后再应用它。 |
| EntranceThemeTransition | 为控件第一次显示的情形提供动画的过渡表现方式。 |
| ReorderThemeTransition | 为列表-视图控件项目更改顺序的情形提供动画的过渡表现方式。通常它作为拖放操作的结果出现。不同的控件和主题可能具有不同的动画特征。 |
| RepositionThemeTransition | 为控件更改位置的情形提供动画的过渡表现方式。 |
| API | 描述 |
|---|---|
| DropTargetItemThemeAnimation | 应用到潜在的拖放目标元素的预配置动画。 |
| FadeInThemeAnimation | 控件第一次出现时应用到控件的预配置不透明度动画。 |
| FadeOutThemeAnimation | 控件从 UI 中删除或隐藏时应用到控件的预配置不透明度动画。 |
| PopInThemeAnimation | 控件的弹入组件显示时应用到它们的预配置动画。此动画结合了不透明度和转换。 |
| PopOutThemeAnimation | 控件的弹入组件关闭或删除时应用到它们的预配置动画。此动画结合了不透明度和转换。 |
| RepositionThemeAnimation | 对象重新放置时应用的预配置动画。 |
| SplitCloseThemeAnimation | 使用拆分动画显示目标 UI 的预配置动画。 |
| PointerDownThemeAnimation | 用于用户点击或单击项目或元素操作的预配置动画。 |
| PointerUpThemeAnimation | 在点击一个项目或元素后(指针不再悬停在上面)运行的用户操作预配置动画。 |
| SplitOpenThemeAnimation |
使用拆分动画显示目标 UI 的预配置动画。 |
上述表格從以下博客複製:
http://www.cnblogs.com/hebeiDGL/archive/2012/10/27/2742293.html
比如為GridView添加添加、刪除元素的動畫:
<GridView>
<GridView.Items>
<AddDeleteThemeTransition />
</GridView.Items>
</GridView>
為一個按鈕添加一個進入的動畫:
<Button x:Name="button" Content="Button" HorizontalAlignment="Left" Height="69" Margin="-13,93,0,-117" VerticalAlignment="Top" Width="115">
<Button.Transitions>
<TransitionCollection>
<EntranceThemeTransition FromHorizontalOffset="500" FromVerticalOffset="500" />
</TransitionCollection>
</Button.Transitions>
</Button>
5.代碼控制動畫的播放與停止
上面介紹的都是自動播放的動畫,實際上我們可以手動開始、停止動畫。
我寫了一個單擊變化長度的動畫:
<Grid.Resources>
<Storyboard x:Name="framesBoard"> ----標識一個名字進行操作
<DoubleAnimationUsingKeyFrames
Storyboard.TargetName="frames"
Storyboard.TargetProperty="Width"
Duration="0:0:2"
EnableDependentAnimation="True"
>
<LinearDoubleKeyFrame KeyTime="0:0:2" Value="500" />
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Grid.Resources>
private void frames_Click(object sender, RoutedEventArgs e)
{
framesBoard.Begin();
}
【WIN10】Storyboard動畫板的更多相关文章
- vue動畫和過渡
過渡: 插入.更新和溢出DOM時,提供不同的方式應用過渡效果: vue提供內置的封裝組件,用於包裹要實現過渡效果的內容. <transition name="a">&l ...
- jquery 動畫
animate({param},speed,callback)/animate({param},speed)/animate({param}) param表示css屬性:屬性名必須是camel標識法: ...
- Win10 dell驱动触摸板安装
Win10 dell驱动触摸板安装 在此之前安装驱动后要重启
- CSS製作動畫效果(Transition、Animation、Transform)
CSS 2D Transforms https://www.w3schools.com/css/css3_2dtransforms.asp CSS 3D Transforms https://www. ...
- (译)Getting Started——1.2.4 Tutorial:Storyboard(故事板)
该教程是基于你在前面的课程中构建的项目上进行的.学完本教程后,你将使用你前面学到的视图.视图控制器.动作.导航的内容,还会为应用创建一些关键的用户界面,并在场景中添加行为 以下就是本节课的内容: 1. ...
- 修复Win10下Synaptics触摸板双指触击无法打开右键菜单的问题
从Win8.1开始,Synaptics触摸板驱动的键值就不能正确设置,使得双指触击失效,无法打开右键菜单. 解决方法1.打开注册表:2.搜索“2FingerTapAction”,或直接定位到以下两个路 ...
- nib、xib、storyboard(故事板)
nib:NeXT Interface Builder的缩写 xib:XML nib的缩写 相同点: nib和xib都是Interface Builder的图形界面设计文档.Interface Buil ...
- 【WIN10】文本圖標
在Storyboard動畫板中,我使用文本顯示了一個“心”形.在這裡,我將介紹一下文本圖標. 1.Segoe MDL2 Assets 首先,它必須使用字體:Segoe MDL2 Assets 其次,它 ...
- 配置editplus,讓其支持代碼自動格式化功能.
使用editplus已經好多年了,累積了不少的東西,想換IDE比較麻煩,所以就研究了一下用editplus搭配gofmt.exe配置go語言代碼自動格式化的功能.還好功夫不負有心人,終於被我搞懂了,不 ...
随机推荐
- 【CodeForces】790 C. Bear and Company 动态规划
[题目]C. Bear and Company [题意]给定大写字母字符串,交换相邻字符代价为1,求最小代价使得字符串不含"VK"子串.n<=75. [算法]动态规划 [题解 ...
- c++ virtual总结
virtual-关键字用于修饰成员函数时,有以下特性 1.用于修饰的基类的成员函数,被修饰的基类成员函数-其派生类的同名成员函数也默认带有virtual 关键字2.当virtual 用于修饰析构函数( ...
- Java 中的几种线程池这么用才是对的
为什么要使用线程池 虽然大家应该都已经很清楚了,但还是说一下.其实归根结底最主要的一个原因就是为了提高性能. 线程池和数据库连接池是同样的道理,数据库连接池是为了减少连接建立和释放带来的性能开销.而线 ...
- 爬虫--Scrapy框架的基本使用
流程框架 安装Scrapy: (1)在pycharm里直接就可以进行安装Scrapy (2)若在conda里安装scrapy,需要进入cmd里输入指令conda install scrapy ...
- jq时间日期插件的使用-datetimepicker
分三步 首先引入各种包 然后搞哥容器用id 然后加入一段js 实例: 下载:http://files.cnblogs.com/files/wordblog/datetimepicker-maste ...
- 不相交集ADT--数组实现
不相交集是解决等价问题的一种有效的数据结构,之所以称之为有效是因为,这个数据结构简单(几行代码,一个简单数组就可以搞定),快速(每个操作基本上可以在常数平均时间内搞定). 首先我们要明白什么叫做等价关 ...
- 健身VS不健身,完全是两种不同的人生!
这两天一组同龄人合照 刷爆了国内健身圈, 图左是一位67岁的老人, 图右是67岁的健美运动员杨新民老师 相同年龄, 但从外观上有着强烈的距离感! 让多人不禁感叹,健身和不健身, 简直就是两种状态,两种 ...
- 135.Candy---贪心
题目链接 题目大意:分糖果,每个小朋友都有一个ratings值,且每个小朋友至少都要有一个糖果,而且每个小朋友的ratings值如果比左右邻舍的小朋友的ratings值高,则其糖果数量也比邻舍的小朋友 ...
- 无状态Http
无状态的根本原因 浏览器和服务器使用socket通信,服务器将请求结果返回给浏览器后,会关闭当前socket连接.而且服务器会在处理页面完毕后销毁页面对象. 应用层面的原因 浏览器和服务器之间通信都遵 ...
- C/C++——static修饰符
1. static变量 static 用来说明静态变量.如果是在函数外面定义的,那么其效果和全局变量类似,但是,static定义的变量只能在当前c程序文件中使用,在另一个c代码里面,即使使用exter ...