Silverlight专题(15) - 你自己的视频播放器之自定义MoveToPointSlider

前言:

这几天在网络上看到不少人在问如何创建一个Video Player(Silverlight版本)

而我在微软和这方面打了不少交道

所以计划用两篇文章解答下大家的问题

本篇文章先介绍下如何创建一个自定义的滚动条

下篇文章创建完整的一个Video Player

问题:

大家可能要问,你为什么要自定义滚动条(Slider)呢?

微软的Sliverlight控件中不是已经默认的有个Slider了吗?

如下所示:我们使用微软默认的Slider控件如下

Default Slider

展示程序如下(大家可以试试)

大家是不是发现点什么啦?

对了,就是Slider并不是按照你点击哪里,他就滚到哪里的方式工作的

而是以上面设置的LargeChange的幅度(也就是每点一次,只移动10*400/100)工作

解决方案:

难道我们没有办法了吗?

自定义一个Slider可以帮你忙(我取名为MoveToPointSlider)

原理图如下:

                (本图来自MSDN)

如图所示,Slider主要由3三部分组成,左边和右边的RepeatButton,中间的Track

也就是整个Slider共分成了3列

其中左边的RepeatButton和中间的Track分别属于第1,2列,其宽度为Auto

而右边的RepeatButton在第3列,占据了剩下的空间,其宽度设置为*

(有关Grid的布局介绍请参见Silverlight专题(8)-布局介绍

现在我们需要在第一以及第三列上各覆盖上一个Rectangle来响应鼠标的点击

使的其能实现我们的预期效果

具体实现步骤如下:

1.给程序添加一个类如下图所示

customslider01

2.让这个类继承Slider类

customslider02

3.实现功能如下

MoveToPointSlider

m_leftTrack就是上面说的第一列的Rectangle

m_rightTrack就是第三列的Rectangle

23~24行就是响应鼠标左键点击使得你点Slider的哪里,Slider上的Thumb就滑到哪里

4.引用MoveToPointSlider并使用他

5.给MoveToPointSlider自定义Style,在Microsoft Expression Blend 2 SP1中操作如下

customslider03

在默认的Slider Style的HorizontalTemplate的自底部添加两个Rectangle控件

并分别命名为LeftTrack和RightTrack

(一定只能是这两个名字,因为我们前面的MoveToPointSlider的底层代码就是通过这两个名字来获取Slider中的控件的

也就是GetTemplateChild(“LeftTrack”)和GetTemplateChild(“RightTrack”))

customslider04

这样我们就得到了我们需要的MoveToPointSlider了

实际效果展示:

实际的程序如下(部署在http://streaming.live.com/):

代码下载:

总结:

本篇大概介绍了下如何在Slider控件的基础上自定义控件

为下篇文章实现合理的视频播放器做了前期准备

posted @ 2008-11-21 15:01  ibillguo  阅读(2036)  评论(3编辑  收藏  举报