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

前言:

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

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

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

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

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

问题:

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

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

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

ContractedBlock.gifExpandedBlockStart.gifDefault Slider
1 <Grid x:Name="LayoutRoot" Background="#808080"> 
2     <Slider Width="400" Maximum="100" Minimum="0" LargeChange="10" SmallChange="1"/> 
3 </Grid>

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

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

对了,就是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.实现功能如下

ContractedBlock.gifExpandedBlockStart.gifMoveToPointSlider
1 public class MoveToPointSlider : Slider
2 {
3     private Thumb m_horizontalThumb;
4     private FrameworkElement m_leftTrack;
5     private FrameworkElement m_rightTrack;
6 
7     public override void OnApplyTemplate()
8     {
9         base.OnApplyTemplate();
10         base.OnApplyTemplate();
11         m_horizontalThumb = GetTemplateChild("HorizontalThumb") as Thumb;
12         m_leftTrack = GetTemplateChild("LeftTrack") as FrameworkElement;
13         if (m_leftTrack != null)
14             this.m_leftTrack.MouseLeftButtonDown += new MouseButtonEventHandler(OnMoveThumbToMouse);
15 
16         m_rightTrack = GetTemplateChild("RightTrack") as FrameworkElement;
17         if (m_rightTrack != null)
18             this.m_rightTrack.MouseLeftButtonDown += new MouseButtonEventHandler(OnMoveThumbToMouse);
19     }
20 
21     void OnMoveThumbToMouse(object sender, MouseButtonEventArgs e)
22     {
23         Point p = e.GetPosition(this);
24         Value = (p.X - (m_horizontalThumb.ActualWidth / 2)) / (ActualWidth - m_horizontalThumb.ActualWidth) * Maximum;
25     }
26 }

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控件的基础上自定义控件

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

转载于:https://www.cnblogs.com/ibillguo/archive/2008/11/21/1338462.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java面试题31:结构型模式中最体现扩展性的模式是()

java面试题31&#xff1a;结构型模式中最体现扩展性的模式是&#xff08;&#xff09; A:装饰模式 B&#xff1a;合成模式 C:桥接模式 D:适配器 蒙蔽树上蒙蔽果&#xff0c;蒙蔽树下你和我 结构型模式是描述如何将类对象结合在一起&#xff0c;形成一个更大的结构&#x…

hive 多用户访问模注意问题

首先是安装mysql 安装mysql数据库及客户端 yum install mysql-server yum install mysql servicemysqld start步骤一&#xff1a; yum -y install mysql-server步骤二&#xff1a;service mysqld start步骤三&#xff1a;mysql -u root -p  Enter password: &#xff08;默认…

10行代码实现小程序支付功能!丨实战

前面给大家讲过一个借助小程序云开发实现微信支付的&#xff0c;但是那个操作稍微有点繁琐&#xff0c;并且还会经常出现问题&#xff0c;今天就给大家讲一个简单的&#xff0c;并且借助官方支付api实现小程序支付功能。 传送门&#xff1a;借助小程序云开发实现小程序支付功能…

ASP.NET站点导航(五)

理解并扩展 ASP.NET 2.0 中的站点导航系统 http://msdn.microsoft.com/zh-cn/library/aa479338.aspx 发布日期 : 2006-3-15 | 更新日期 : 2006-3-15David Gristwood Developer & Platform Group, Microsoft 适用于&#xff1a; Microsoft ASP.NET 2.0 (Beta 2) 摘要&#…

java面试题32:Java网络程序设计中,下列正确的描述是()

java面试题32&#xff1a;Java网络程序设计中,下列正确的描述是&#xff08;&#xff09; A&#xff1a;Java网络编程API建立在Socket基础之上 B:Java网络接口只支持tcP以及其上层协议 C&#xff1a;Java网络接口只支持UDP以及其上层协议 D:Java网络接口支持IP以上的所有高…

【收藏】C# WinForm开发系列 - DataGridView 使用方法集锦 - 宁波.Net技术讨论区

1.DataGridView实现课程表 testcontrol.rar 2.DataGridView二维表头及单元格合并 DataGridView单元格合并和二维表头.rar myMultiColHeaderDgv.rar 3.DataGridView单元格显示GIF图片 gifanimationindatagrid.rar 4.自定义显示DataGridView列(行头显示行号与图标,同一单元格显示…

Java中Map, List, Set和Queue的区别和使用场景

转&#xff1a;https://blog.csdn.net/kingcat666/article/details/75579632 1. Java集合类基本概念 在编程中&#xff0c;常常需要集中存放多个数据。从传统意义上讲&#xff0c;数组是我们的一个很好的选择&#xff0c;前提是我们事先已经明确知道我们将要保存的对象的数量…

java面试题33 Math.round(11.5) 等于多少 (). Math.round(-11.5) 等于多少 ( ).

java面试题33 Math.round(11.5) 等于多少 (). Math.round(-11.5) 等于多少 ( ). A 11 ,-11 B 11 ,-12 C 12 ,-11 D 12 ,-12 蒙蔽树上蒙蔽果&#xff0c;蒙蔽树下你和我。 做Java的面试题时遇到了以下这题&#xff0c;百度了一下Math.round()的修约规则&#xff0c;有的说…

VC返回文件所在的路径

//返回文件所在的路径void GetPath(CString& Des,char* src){CString TmpStr src;int Location TmpStr.ReverseFind("");Des TmpStr.Left(Location);}转载于:https://www.cnblogs.com/enterBeijingThreetimes/archive/2008/11/26/1341615.html

Protel 介绍 protel99se正式汉化版下载 Protel DXP2004简体中文版

1. Protel介绍 protel99se正式汉化版下载 Protel DXP2004简体中文版http://www.elecfans.com/soft/22/23/2008/200807315722.html2.protel99se正式汉化版免费下载http://www.elecfans.com/zhuanti/protel99se.htmProtel se&#xff1a;Protel 99SE具有丰富的设计功能&#xff0…

java面试题34下面关于程序编译说法正确的是()

java面试题34下面关于程序编译说法正确的是&#xff08;&#xff09; A:java语言是编译型语言&#xff0c;会把java程序编译成二进制机器指令直接运行 B&#xff1a;java编译出来的目标文件与具体操作系统有关 C:java在运行时才进行翻译指令 D&#xff1a;java编译出来的目…

java面试题35 给定以下JAVA代码,这段代码运行后输出的结果是()

java面试题35 给定以下JAVA代码&#xff0c;这段代码运行后输出的结果是&#xff08;&#xff09; 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 public class Test { public static int aMethod(int i)throws Exception { try{ …

HDU-4027 Can you answer these queries? --线段树

题目链接&#xff1a; http://acm.hdu.edu.cn/showproblem.php?pid4027 题意及思路&#xff1a; 有一排战舰&#xff0c;给出每个战舰的能力值&#xff0c;存在两种操作&#xff1a;第一种是把一定范围内所有战舰能力值开根号并向下取整&#xff0c;第二种是求一定区域内所有战…

Proxy server 緩存 jsp html

如果服務器端使用Proxy server,jsp頁面會出現頁面混亂的問題.(不同用戶登陸,出現的是同一個用戶的資料),為了避免這種情況存在,可以有兩種方法解決. eg: menu 所在頁面為toppanel.jsp,鏈接就為:http://localhost:8080/q/toppanel.jsp. 這樣user登陸可能會出現manager的menu,man…

shiro学习(6):shiro连接数据库

首先我们先看一下数据库 再看看数据库的测试数据 在我们创建好的maven项目中看一下目录结构 在pom.xml引入 <dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version></dependency&g…

【js监听报错】页面监听js报错问题

<html> <head> <script type"text/javascript">// 页面监听js报错问题 οnerrοrhandleErrvar txt"" function handleErr(msg,url,l) { txt"本页中存在错误如下&#xff1a;\n\n" txt"错误&#xff1a;" msg &quo…

链表逆序(JAVA实现)

题目&#xff1a;将一个有链表头的单向单链表逆序 分析&#xff1a; 链表为空或只有一个元素直接返回&#xff1b;设置两个前后相邻的指针p,q&#xff0c;使得p指向的节点为q指向的节点的后继&#xff1b;重复步骤2&#xff0c;直到q为空&#xff1b;调整链表头和链表尾&…

vs/c++缓冲区溢出,未初始化变量检查

缓冲区溢出(buffer overrun)是c/c开发中比较令人头痛的问题,vs2005中有若干编译选项 可以有效的帮助程序员定位这些问题: 1,/GS:优化模式下有效,检测缓冲区溢出,只能检测出覆盖了返回地址的情况. 2,/RTCs:优化模式下无效,检测缓冲区溢出 voidTest2() { charbuffer1[100]; …

java面试题36 已知如下的命令执行 java MyTest a b c 请问哪个语句是正确的? ( )

java面试题36 已知如下的命令执行 java MyTest a b c 请问哪个语句是正确的&#xff1f; ( ) A args[0] "MyTest a b c" B args[0] "MyTest" C args[0] "a" D args[1] "b" 蒙蔽树上蒙蔽果&#xff0c;蒙蔽树下你和我 对于java命…

【微信网页直接下载app】微信跳转-微信浏览器中直接唤起本地浏览器和App

文档传送门&#xff1a;https://github.com/EthanOrange/wechat-redirectdemo&#xff1a; http://wxredirect.jslab.fun/call-app 转载于:https://www.cnblogs.com/xiaohuizhang/p/11377553.html