拖动MediaPlay控件的滚动条来控制媒体播放--silverlight(银光)学习(4)

拖动MediaPlay控件的滚动条来控制媒体播放--silverlight(银光)学习(4),第1张

概述10.1 本打算写完 MediaPlay控件的拖动滚动条来控制媒体播放的功能,可惜在这里卡壳了。我的拖放进度条的效果总是不理想,至到今晚上看到一段视频-- DRAG AND DROP FUNCTIONALITY IN SILVERLIGHT 1.1才发现自己只不过少写了一行代码。      不过Mediaplay控件我不打算再写下去了,因为微软公司在 ASPNETFutures组件包里提供了asp 10.1 本打算写完 MediaPlay控件的拖动滚动条来控制媒体播放的功能,可惜在这里卡壳了。我的拖放进度条的效果总是不理想,至到今晚上看到一段视频-- DRAG AND DROP FUNCTIONALITY IN SILVERLIGHT 1.1才发现自己只不过少写了一行代码。
     不过Mediaplay控件我不打算再写下去了,因为微软公司在 ASPNETFutures组件包里提供了asp:media组件,这个组件可以用在silverlight页面里,功能比我写的要强大,还支持换肤。
     好了,如何通过拖动进度条来控制媒体播放呢?要用到silverlight里MediaElement的一个属性position,它是一个timespan,设定它的值后就可以定位到你想要播放的时间点上。
    如果找进度条和 MediaElement 的position之间的关系呢。我们看下面的图:
  


   | <--              left                   --> | currentposition: x                           |
   |<------------------------------------totalLength------------------------->|    
  
    中间滚动条的位置left和滚动槽的总长度totalLength就对应着媒体播放当前时间点position和媒体播放完所要的总时间NaturalDuration.
    再讲一个知识点:获取所播放的媒体的总播放时间用MediaElement的NaturalDuration属性。
   所以我们可以用这样的公式来表示:  
   position = (left/totalLength)*NaturalDuration

     好了,解决了一个技术点,那么更重要的一个技术点是如何拖动滚动条呢?这涉及到三个鼠标事件:
 MouseleftbuttonDown,MouseMove,MouseleftbuttonUp.也就是说当你用鼠标拖放一个东西的时候,首先要按下鼠标
左键,然后拖放,拖放到指定的位置后就放开鼠标左键,从程序角度上讲这三个事件就先后发生了。
     拖放的时候还要注意的一点是:为了捕获鼠标,我们要用到CaptureMouse()方法,放开鼠标左键的时候我们要释放鼠标ReleaseMouseCapture();
     核心代码如下:
  

//点下鼠标左键


voID TimeThumb_MouseleftbuttonDown(object  sender, MouseEventArgs e)

{

   ((System.windows.Media.Visual)sender).CaptureMouse();
//捕获鼠标


    
this.timelinePointStart = e.Getposition(Parent as UIElement).X;//获取鼠标的x坐标轴

             

    Timelinedrag 
= true;//标识拖放 *** 作开始 

 

                

 }
 



//移动鼠标

   voID TimeThumb_MouseMove(object  sender, MouseEventArgs e)

  

{

     
if (Timelinedrag)

     

{

        timelinePoinxEnd 
= e.Getposition(Parent as UIElement).X;

        Double delta 
= timelinePoinxEnd - timelinePointStart;

                      

        
double left = (double)TimeThumb.GetValue(Canvas.leftProperty);


       timelinePointStart 
= timelinePoinxEnd;//我就是掉了这段代码

                       

       
this.TimeThumb.SetValue( Canvas.leftProperty, left+delta);

                      

       }

        

   }


//放开鼠标左键

 voID TimeThumb_MouseleftbuttonUp(object  sender, MouseEventArgs e)

@H_312_419@

        

{

     

            Timelinedrag 
= false;

            

           
this.vIDeoWindow.Pause();//暂停播放

            

            
double left =(double)TimeThumb.GetValue(Canvas.leftProperty);

            

            
double rate = left/(this.TimeSlIDer.WIDth -this.TimeThumb.WIDth); //视频拖放到新位置在整个播放进度的比率

            

            
long  ticks = Convert.ToInt64(rate * this.vIDeoWindow.NaturalDuration.TimeSpan.Ticks);

            

            
this.vIDeoWindow.position=new TimeSpan(ticks);

           

            
this.vIDeoWindow.Play();

            

            ((System.windows.Media.Visual)sender).ReleaseMouseCapture();

        }

   源代码下载: /Files/wangergo/MediaPlayControlDrag.rar

   本文版权属于 www.80back.com ,williams所有, 转载请注明出处。   总结

以上是内存溢出为你收集整理的拖动MediaPlay控件的滚动条来控制媒体播放--silverlight(银光)学习(4)全部内容,希望文章能够帮你解决拖动MediaPlay控件的滚动条来控制媒体播放--silverlight(银光)学习(4)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1058427.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存