源碼下載: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  

貝塞爾曲線,具體可以查看貝塞爾曲線的定義,再進行理解。

具體參照博客:http://blog.csdn.net/tcjiaan/article/details/7550506

    - 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動畫板的更多相关文章

  1. vue動畫和過渡

    過渡: 插入.更新和溢出DOM時,提供不同的方式應用過渡效果: vue提供內置的封裝組件,用於包裹要實現過渡效果的內容. <transition name="a">&l ...

  2. jquery 動畫

    animate({param},speed,callback)/animate({param},speed)/animate({param}) param表示css屬性:屬性名必須是camel標識法: ...

  3. Win10 dell驱动触摸板安装

    Win10 dell驱动触摸板安装 在此之前安装驱动后要重启

  4. CSS製作動畫效果(Transition、Animation、Transform)

    CSS 2D Transforms https://www.w3schools.com/css/css3_2dtransforms.asp CSS 3D Transforms https://www. ...

  5. (译)Getting Started——1.2.4 Tutorial:Storyboard(故事板)

    该教程是基于你在前面的课程中构建的项目上进行的.学完本教程后,你将使用你前面学到的视图.视图控制器.动作.导航的内容,还会为应用创建一些关键的用户界面,并在场景中添加行为 以下就是本节课的内容: 1. ...

  6. 修复Win10下Synaptics触摸板双指触击无法打开右键菜单的问题

    从Win8.1开始,Synaptics触摸板驱动的键值就不能正确设置,使得双指触击失效,无法打开右键菜单. 解决方法1.打开注册表:2.搜索“2FingerTapAction”,或直接定位到以下两个路 ...

  7. nib、xib、storyboard(故事板)

    nib:NeXT Interface Builder的缩写 xib:XML nib的缩写 相同点: nib和xib都是Interface Builder的图形界面设计文档.Interface Buil ...

  8. 【WIN10】文本圖標

    在Storyboard動畫板中,我使用文本顯示了一個“心”形.在這裡,我將介紹一下文本圖標. 1.Segoe MDL2 Assets 首先,它必須使用字體:Segoe MDL2 Assets 其次,它 ...

  9. 配置editplus,讓其支持代碼自動格式化功能.

    使用editplus已經好多年了,累積了不少的東西,想換IDE比較麻煩,所以就研究了一下用editplus搭配gofmt.exe配置go語言代碼自動格式化的功能.還好功夫不負有心人,終於被我搞懂了,不 ...

随机推荐

  1. 【CodeForces】790 C. Bear and Company 动态规划

    [题目]C. Bear and Company [题意]给定大写字母字符串,交换相邻字符代价为1,求最小代价使得字符串不含"VK"子串.n<=75. [算法]动态规划 [题解 ...

  2. c++ virtual总结

    virtual-关键字用于修饰成员函数时,有以下特性 1.用于修饰的基类的成员函数,被修饰的基类成员函数-其派生类的同名成员函数也默认带有virtual 关键字2.当virtual 用于修饰析构函数( ...

  3. Java 中的几种线程池这么用才是对的

    为什么要使用线程池 虽然大家应该都已经很清楚了,但还是说一下.其实归根结底最主要的一个原因就是为了提高性能. 线程池和数据库连接池是同样的道理,数据库连接池是为了减少连接建立和释放带来的性能开销.而线 ...

  4. 爬虫--Scrapy框架的基本使用

    流程框架 安装Scrapy: (1)在pycharm里直接就可以进行安装Scrapy      (2)若在conda里安装scrapy,需要进入cmd里输入指令conda install scrapy ...

  5. jq时间日期插件的使用-datetimepicker

    分三步  首先引入各种包 然后搞哥容器用id  然后加入一段js 实例: 下载:http://files.cnblogs.com/files/wordblog/datetimepicker-maste ...

  6. 不相交集ADT--数组实现

    不相交集是解决等价问题的一种有效的数据结构,之所以称之为有效是因为,这个数据结构简单(几行代码,一个简单数组就可以搞定),快速(每个操作基本上可以在常数平均时间内搞定). 首先我们要明白什么叫做等价关 ...

  7. 健身VS不健身,完全是两种不同的人生!

    这两天一组同龄人合照 刷爆了国内健身圈, 图左是一位67岁的老人, 图右是67岁的健美运动员杨新民老师 相同年龄, 但从外观上有着强烈的距离感! 让多人不禁感叹,健身和不健身, 简直就是两种状态,两种 ...

  8. 135.Candy---贪心

    题目链接 题目大意:分糖果,每个小朋友都有一个ratings值,且每个小朋友至少都要有一个糖果,而且每个小朋友的ratings值如果比左右邻舍的小朋友的ratings值高,则其糖果数量也比邻舍的小朋友 ...

  9. 无状态Http

    无状态的根本原因 浏览器和服务器使用socket通信,服务器将请求结果返回给浏览器后,会关闭当前socket连接.而且服务器会在处理页面完毕后销毁页面对象. 应用层面的原因 浏览器和服务器之间通信都遵 ...

  10. C/C++——static修饰符

    1. static变量 static 用来说明静态变量.如果是在函数外面定义的,那么其效果和全局变量类似,但是,static定义的变量只能在当前c程序文件中使用,在另一个c代码里面,即使使用exter ...