在文章使用Silverlight for Embedded开发绚丽的界面(2)我介绍了如何通过subproject的方式开发SE应用程序,并在文章使用Silverlight for Embedded开发绚丽的界面(3)提供了AlchemySDK,让开发SE变的更方便。

这篇文章我继续翻译:http://geekswithblogs.net/WindowsEmbeddedCookbook/archive/2009/10/11/silverlight-for-embedded-tutorial-step-2.aspx

我们讲过如何加载一个XAML-based用户界面到我们的应用程序中,并截获程序产生的事件。

这篇文章我们会学习如何使用故事板(storyboard)在我们的用户界面上创建动画,并介绍如何从代码中控制这些动画。

我们使用Expression Blend 2重新打开Silverlight 2 application project,并添加一个新的元素到UI上:TextBlock。

我将其放置在Button下面:

然后我们就可以使用“+”按钮(在”Objects and Timeline”标题下面)创建一个新的storyboard:

我们给新的storyboard分配一个名字方便后面操作:

我们将storyboard的时间光标移至1s处:

旋转TextBlock:

Expression Blend为我们创建动画和呈现指定的视觉效果所需要的中间对象(transformation objects)。

我们让TextBlock执行一个360度旋转:

通过在tranform item上右击设置动画的重复次数。我们设置一直重复:

保存项目返回Platform Builder修改代码。

首先通过FindName从visual root获得指向stroyboard的指针,就像之前我们取得button对象的指针一样。

?
1
2
3
4
5
IXRStoryboardPtr sboard;
if (FAILED(retcode=root->FindName(TEXT("SpinText"), &sboard)))
    return -1;

我们需要在event handler类使用storyboard和button对象,所以修改它以便储存这2个对象的智能指针。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class BtnEventHandler
{
protected:
    IXRButtonBasePtr    btn;
    IXRStoryboardPtr     sboard;
public:
    BtnEventHandler(IXRButtonBasePtr& button, IXRStoryboardPtr& storyboard) : btn(button),sboard(storyboard)
    {   
    }
}

修改在WinMain函数中的声明:

?
1
BtnEventHandler handler(btn,sboard);

编辑OnClick event handler以便控制开始和停止按钮的旋转动画。

先通过获得storyboard对象的属性来判断动画是否在进行中:

?
1
2
3
4
5
6
7
HRESULT        retcode;
XRClockState ckstate;
if (FAILED(retcode=sboard->GetCurrentState(&ckstate)))
    return retcode;

如果ckstate的值是XRClockState_Stopped,说明我们的动画是停止的,那么使用storyboard对象的Begin方法启动它。

同样如果动画是运行的,我们通过Stop方法停止它。

同时我们还想改变button的text以便反应它正执行的动作。IXRButton对象(COM interface) 继承自IXRContentContro对象,IXRContentContro对象定义了访问"content"的方法。

那么SE对象的"content"到底是什么?

其实它是XRValue 类的一个实例。XRValue类包含了不同的值:字符串(strings)、数字(numbers)、坐标(coordinates)等。它当前的值类型(content type)是通过vType字段来指定的,vType可以是枚举类型VALUE_TYPE 的一个值:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
VTYPE_NONE = 0,
VTYPE_FLOAT = 1,
VTYPE_INT = 2,
VTYPE_BOOL = 3,
VTYPE_UINT = 4,
VTYPE_COLOR = 5,
VTYPE_READONLY_STRING = 6,
VTYPE_BSTR = 7
VTYPE_POINT = 8,
VTYPE_RECT = 9,
VTYPE_THICKNESS = 10,
VTYPE_SIZE = 11,
VTYPE_GRIDLENGTH = 12,
VTYPE_CORNER_RADIUS = 13,
VTYPE_OBJECT = 14

XRValue对象是否让你想起COM中的VARIANT对象?

在此我们定义一个只读的字符串(read only string)作为button的content:

?
1
2
3
XRValue btnvalue;
btnvalue.vType=VTYPE_READONLY_STRING;

我们通过pReadOnlyStringVal字段来赋给按钮的值是"Spin!" 还是"Stop!",当然我们是根据动画的当前状态来判断的。

全部的enent handler代码是这样的:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
HRESULT OnClick(IXRDependencyObject* source,XRMouseButtonEventArgs* args)
{
    HRESULT        retcode;
    XRClockState ckstate;
    if (FAILED(retcode=sboard->GetCurrentState(&ckstate)))
        return retcode;
    XRValue btnvalue;
    btnvalue.vType=VTYPE_READONLY_STRING;
    if (ckstate==XRClockState_Stopped)
    {
        btnvalue.pReadOnlyStringVal=L"Stop!";
        if (FAILED(retcode=sboard->Begin()))
            return retcode;
    }
    else
    {
        btnvalue.pReadOnlyStringVal=L"Spin!";
        if (FAILED(retcode=sboard->Stop()))
            return retcode;
    }
    if (FAILED(retcode=btn->SetContent(&btnvalue)))
        return retcode;
    return S_OK;
}

你可以从这里下载Demo的代码:

http://cid-9b7b0aefe3514dc5.skydrive.live.com/self.aspx/.Public/SilverlightSample2.zip

作者: 王克伟
出处: http://wangkewei.cnblogs.com/ 
版权声明: 本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任的权利。
您可以从这里更方便的找到我的文章。

使用Silverlight for Embedded开发绚丽的界面(4)相关推荐

  1. 使用Silverlight for Embedded开发绚丽的界面(3)

    上一篇文章在这里:使用Silverlight for Embedded开发绚丽的界面(2) 上一篇文章是介绍通过subproject的方式来开发SE应用程序,开发起来太麻烦.这篇文章我提供Alchem ...

  2. 使用Silverlight for Embedded开发绚丽的界面(2)

    5.Step by Step 为了偷懒,我只是简单翻译一下一个国外朋友的博客文章,文章不错,我只是在此基础上做一点补充,并提供带Embedded XAML Runtime引擎的SDK(下一篇文章),让 ...

  3. 使用Silverlight for Embedded开发绚丽的界面(1)

    本文目标读者 这系列文章写给对使用Silverlight for Embedded(SE)在Windows嵌入式系统上开发绚丽界面感兴趣的朋友.要求读者有一定的Win32基础,C++基础,虽然SE是基 ...

  4. 艾伟_转载:如何开发绚丽、高效率的界面(Windows嵌入式系统)

    上篇文章中提到用户体验(UE),并且说到国内有专门去做UE的团队也很少.据我了解Microsoft.Nokia.Google等,还有国内的Baidu是有比较专业的UE团队.对于我们这样的普通团队.普通 ...

  5. python开发的优秀界面-八款常用的 Python GUI 开发框架推荐

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 乔柯 PS:如有需要Python学习资料的小伙伴可以加点击下方链接 ...

  6. Silverlight C# 游戏开发:面向对象在游戏中的实例(一)

    本系列所有代码都是使用Microsoft Visual Studio 2008开发,为基于Silverlight的游戏开发技术,如果您看完之后觉得不错,回复顶一下,万分感激:) 今天,我将带来一个非常 ...

  7. Silverlight C# 游戏开发:L5 3D基本的灯光

    Silverlight C# 游戏开发:L5 3D基本的灯光 我们在设计和开发3D的时候最常用的就是灯光,它有的时候比摄像机还要重要,一些花哨漂亮的表现主要通过灯光实现,相比场景中只有一个的主要摄像机 ...

  8. Silverlight C# 游戏开发:项目开发实例和小技巧索引

    Silverlight C# 游戏开发:项目开发实例和小技巧索引 相比于技术文章而言,本索引中包含的都是独立的项目,争取按照每个独立的项目开发来编写系列,全部为原创,开发过程可能语无伦次,可能相当幼稚 ...

  9. Silverlight C# 游戏开发:Flyer10完成寻找工作

    Silverlight C# 游戏开发:Flyer10完成"寻找"工作 上一次我们一起搞定了动画的一些效果,在最后给出了一排蝴蝶的随机扇动,今次我们一起研究一下互动元素的制作,完成 ...

最新文章

  1. mysql count 条件_我以为我对MySql很了解,直到我面试了字节跳动
  2. 深入理解Async/Await
  3. 简易航空订票系统_四川航空APP全新升级改版,三大亮点提升订票体验
  4. 1. 初识ZooKeeper。
  5. 中山大学计算机线性代数第六版答案,中山大学2013线性代数第二次作业
  6. 12个开放平台大家一起来玩
  7. 盘点.确保物联网设备顺利运行的9项测试
  8. mapreduce 和hive 的区别
  9. 港科资讯 | 香港科大与瑞士百达资产管理联合调查:香港个人投资者ESG意识及相关投资经验较低 惟投资意欲强劲...
  10. 机器之心对俞栋的采访
  11. linux cut命令学习,Linux中的cut 命令详解
  12. 计算机游戏act动作游戏,传统动作类游戏有哪些_好玩的ACT游戏盘点
  13. linux读书摘要--正规表示法与文件格式化处理
  14. 功能测试——抓包工具(fiddler)
  15. 有苦有乐的算法 --- 一个int类型的数,换成二进制后,提取最右侧的1所在位置
  16. Java多线程自我小结
  17. 「业务架构」通过设计实现业务模型架构
  18. vue 项目 v-cli3 IE浏览器无法打开app.js 报错解决
  19. 如何细分暴利关键词实现月入10万+
  20. 48074-75-5,m-PEG5-2-methylacrylateMichael加成反应中,丙烯酸甲酯基团与胺反应

热门文章

  1. mysql一张表两个索引字段是建两颗独立索引树吗?
  2. 002_入门HelloWorldServlet
  3. java css_JavaWeb中基本的CSS的使用
  4. redis存10万条数据_redis详细介绍
  5. Linux c语言虚拟串口,利用socat和cutecom实现Linux虚拟串口通信
  6. mac搭建appium自动化之testNG
  7. mui汉字图标_MUI从入门到项目实战(三)增加自定义icon图标
  8. ssm框架app管理平台_后端程序员跨平台应用的前端框架uni-app初探
  9. setfacl命令_一名合格的Linux运维人员应该掌握哪些命令?
  10. 创建springboot出现error:connection timed out创建springboot报错显示连接超时解决方案