mediaPlayer (Silverlight2.0) 二
2.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace SV
{
public partial class KPlayer : UserControl
{
#region 属性
/// <summary>
/// 当前页码
/// </summary>
private Int32 currentPageIndex = 1;
/// <summary>
/// 页面大小
/// </summary>
private const Int32 C_pageSize = 5;
/// <summary>
/// 一次显示的翻页按钮数
/// </summary>
private const Int32 C_pagingButtonCount = 5;
/// <summary>
/// 媒体库文件总数
/// </summary>
private Int32 recordCount = 34;
/// <summary>
/// 播放列表最大对象数
/// </summary>
public const Int32 C_PlayerListMax = 2;
/// <summary>
/// 播放器播放状态
/// </summary>
private MediaElementState playerState;
/// <summary>
/// 一个媒体文件播放的时间长
/// </summary>
private TimeSpan mediaTimeSpan;
/// <summary>
/// 当前播放的文件
/// </summary>
private SV.Model.AbsMediaModel currentMedia;
private double silderMaxPoint;
private double silderMinPoint;
private double silderWidth;
private bool mouseDrag=false;//标识鼠标播放开始
private double mouseStartPoint;//鼠标拖曳开始位置
private double mouseEndPoint; //鼠标拖曳结束位置
private double volume_silderMaxPoint;
private double volume_silderMinPoint;
private double volume_silderWidth;
private bool volume_mouseDrag = false;//标识鼠标播放开始
private double volume_mouseStartPoint;//鼠标拖曳开始位置
private double volume_mouseEndPoint; //鼠标拖曳结束位置
#endregion
public KPlayer()
{
InitializeComponent();
loadEventHandle();
createPagerTemplement(recordCount, C_pageSize);
lstboxBind(currentPageIndex, C_pageSize);
initSilder();
}
/// <summary>
/// 注册事件
/// </summary>
private void loadEventHandle()
{
this.PlayButton.MouseEnter += new MouseEventHandler(PlayerButton_MouseEnter);
this.PlayButton.MouseLeftButtonDown += new MouseButtonEventHandler(PlayerButton_MouseLeftButtonDown);
this.PlayButton.MouseLeave += new MouseEventHandler(PlayerButton_MouseLeave);
this.PauseButton.MouseEnter += new MouseEventHandler(PauseBtn_MouseEnter);
this.PauseButton.MouseLeftButtonDown += new MouseButtonEventHandler(PauseBtn_MouseLeftButtonDown);
this.PauseButton.MouseLeave += new MouseEventHandler(PauseBtn_MouseLeave);
this.StopButton.MouseEnter += new MouseEventHandler(StopBtn_MouseEnter);
this.StopButton.MouseLeftButtonDown += new MouseButtonEventHandler(StopBtn_MouseLeftButtonDown);
this.StopButton.MouseLeave += new MouseEventHandler(StopBtn_MouseLeave);
this.NextButton.MouseEnter += new MouseEventHandler(NextBtn_MouseEnter);
this.NextButton.MouseLeftButtonDown += new MouseButtonEventHandler(NextBtn_MouseLeftButtonDown);
this.NextButton.MouseLeave += new MouseEventHandler(NextBtn_MouseLeave);
this.PreviousButton.MouseEnter += new MouseEventHandler(PrevBtn_MouseEnter);
this.PreviousButton.MouseLeftButtonDown += new MouseButtonEventHandler(PrevBtn_MouseLeftButtonDown);
this.PreviousButton.MouseLeave += new MouseEventHandler(PrevBtn_MouseLeave);
this.TimeSlider.MouseLeftButtonDown += new MouseButtonEventHandler(Silder_MouseLeftButtonDown);
this.TimeThumb.MouseLeftButtonDown += new MouseButtonEventHandler(SilderThumb_MouseLeftButtonDown);
this.TimeThumb.MouseMove += new MouseEventHandler(SilderThumb_MouseMove);
this.TimeThumb.MouseLeftButtonUp += new MouseButtonEventHandler(SilderThumb_MouseLeftButtonUp);
}
/// <summary>
/// 初始化按钮的动画
/// </summary>
private void initButtonStoryBoard()
{
PlayButton_MouseEnter.Begin();
}
#region silder 相关处理
/// <summary>
/// 进度条相关的初始化
/// </summary>
private void initSilder()
{
this.silderMinPoint = 7.409;
this.silderMaxPoint = 521.892 - 37.1994 + 7.409;
this.silderWidth = silderMaxPoint - silderMinPoint;
setSilderValue(silderMinPoint);
this.volume_silderMinPoint = 6.402;
this.volume_silderMaxPoint = 104.202 - 19.7022 + 6.402;
this.volume_silderWidth = volume_silderMaxPoint - volume_silderMinPoint;
setVolumeSilderValue(volume_silderMinPoint);
}
private void setSilderValue(double point)
{
this.TimeThumb.SetValue(Canvas.LeftProperty, point);
}
private double getSilderValue()
{
return (double)this.TimeThumb.GetValue(Canvas.LeftProperty);
}
//------volume
private void setVolumeSilderValue(double point)
{
this.VolumeThumb.SetValue(Canvas.LeftProperty, point);
}
private double getVolumeSilderValue()
{
return (double)this.VolumeThumb.GetValue(Canvas.LeftProperty);
}
#endregion
#region 事件
//================播放器事件=========
//-------Silder 事件
protected void Silder_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Point p = e.GetPosition((UIElement)sender);
if (p.X > this.silderMaxPoint)
{
setSilderValue(silderMaxPoint);
return;
}
if (p.X < this.silderMinPoint)
{
setSilderValue(silderMinPoint);
return;
}
setSilderValue(p.X);
}
protected void SilderThumb_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
this.mouseDrag = true;//鼠标拖拽开始
((FrameworkElement)sender).CaptureMouse();//捕获鼠标
this.mouseStartPoint = e.GetPosition((sender as UIElement)).X;
}
protected void SilderThumb_MouseMove(object sender, MouseEventArgs e)
{
Point p = e.GetPosition((UIElement)sender);
if (this.mouseDrag)
{
this.mouseEndPoint = p.X;
double currentThumbPoint = this.getSilderValue();
if (this.mouseEndPoint > this.mouseStartPoint)
{
currentThumbPoint = currentThumbPoint + (mouseEndPoint - mouseStartPoint);
if (currentThumbPoint > silderMaxPoint)
{
currentThumbPoint=silderMaxPoint;
}
setSilderValue(currentThumbPoint);
}
else
{
currentThumbPoint = currentThumbPoint - (mouseStartPoint - mouseEndPoint);
if (currentThumbPoint < silderMinPoint)
{
currentThumbPoint = silderMinPoint;
}
}
setSilderValue(currentThumbPoint);
}
}
protected void SilderThumb_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
this.mouseDrag = false;
this.VideoWindow.Pause();
((FrameworkElement)sender).ReleaseMouseCapture();//释放鼠标
}
// -----------volume silder事件
protected void VolumeSilder_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Point p = e.GetPosition((UIElement)sender);
if (p.X > this.volume_silderMaxPoint)
{
setVolumeSilderValue(volume_silderMaxPoint);
return;
}
if (p.X < this.volume_silderMinPoint)
{
setVolumeSilderValue(volume_silderMinPoint);
return;
}
setVolumeSilderValue(p.X);
}
protected void VolumeSilderThumb_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
this.volume_mouseDrag = true;//鼠标拖拽开始
((FrameworkElement)sender).CaptureMouse();//捕获鼠标
this.volume_mouseStartPoint = e.GetPosition((sender as UIElement)).X;
}
protected void VolumeSilderThumb_MouseMove(object sender, MouseEventArgs e)
{
Point p = e.GetPosition((UIElement)sender);
if (this.volume_mouseDrag)
{
this.volume_mouseEndPoint = p.X;
double currentThumbPoint = this.getVolumeSilderValue();
if (this.volume_mouseEndPoint > this.volume_mouseStartPoint)
{
currentThumbPoint = currentThumbPoint + (volume_mouseEndPoint - volume_mouseStartPoint);
if (currentThumbPoint >volume_silderMaxPoint)
{
currentThumbPoint =volume_silderMaxPoint;
}
setVolumeSilderValue(currentThumbPoint);
}
else
{
currentThumbPoint = currentThumbPoint - (volume_mouseStartPoint - volume_mouseEndPoint);
if (currentThumbPoint < volume_silderMinPoint)
{
currentThumbPoint = volume_silderMinPoint;
}
}
setVolumeSilderValue(currentThumbPoint);
}
}
protected void VolumeSilderThumb_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
this.volume_mouseDrag = false;
((FrameworkElement)sender).ReleaseMouseCapture();//释放鼠标
}
//-------播放按钮事件
protected void PlayerButton_MouseEnter(object sender,EventArgs s)
{
if (this.playerState != MediaElementState.Playing)
{
PlayButton_MouseEnter.Begin();
}
}
protected void PlayerButton_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (this.playerState != MediaElementState.Playing)
{
PlayButton_MouseDown.Begin();
if (this.playerState == MediaElementState.Paused)
{
PauseButton_MouseLeave.Begin();
}
if (this.playerState == MediaElementState.Stopped)
{
StopButton_MouseLeave.Begin();
}
this.playerState = MediaElementState.Playing;
}
else
{
PlayButton_MouseLeave.Begin();
PauseButton_MouseDown.Begin();
this.playerState = MediaElementState.Paused;
}
}
protected void PlayerButton_MouseLeave(object sender, MouseEventArgs e)
{
if (this.playerState != MediaElementState.Playing)
{
PlayButton_MouseLeave.Begin();
}
}
// ---------暂停按钮事件
protected void PauseBtn_MouseEnter(object sender, MouseEventArgs e)
{
if (this.playerState != MediaElementState.Paused)
{
PauseButton_MouseEnter.Begin();
}
}
protected void PauseBtn_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (this.playerState == MediaElementState.Stopped)
{
return;
}
if (this.playerState != MediaElementState.Paused)
{
PlayButton_MouseLeave.Begin();
PauseButton_MouseDown.Begin();
this.playerState = MediaElementState.Paused;
}
else
{
PlayButton_MouseDown.Begin();
PauseButton_MouseLeave.Begin();
this.playerState = MediaElementState.Playing;
}
}
protected void PauseBtn_MouseLeave(object sender, EventArgs e)
{
if (this.playerState != MediaElementState.Paused)
{
PauseButton_MouseLeave.Begin();
}
}
//---------停止按钮事件
protected void StopBtn_MouseEnter(object sender, EventArgs e)
{
if (this.playerState != MediaElementState.Stopped)
{
StopButton_MouseEnter.Begin();
}
}
protected void StopBtn_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (this.playerState != MediaElementState.Stopped)
{
StopButton_MouseDown.Begin();
if (this.playerState == MediaElementState.Paused)
{
PauseButton_MouseLeave.Begin();
}
if (this.playerState == MediaElementState.Playing)
{
PlayButton_MouseLeave.Begin();
}
this.playerState = MediaElementState.Stopped;
}
}
protected void StopBtn_MouseLeave(object sender, MouseEventArgs e)
{
if (this.playerState != MediaElementState.Stopped)
{
StopButton_MouseLeave.Begin();
}
}
// ---------下一个按钮事件
protected void NextBtn_MouseEnter(object sender, MouseEventArgs e)
{
if (this.currentMedia != null && this.currentMedia.Index < this.lstChoosed.Items.Count)
{
return;
}
else
{
NextButton_MouseEnter.Begin();
}
}
protected void NextBtn_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (this.currentMedia != null && this.currentMedia.Index < this.lstChoosed.Items.Count)
{
NextButton_MouseDown.Begin();
NextButton_MouseLeave.Begin();
this.VideoWindow.Play();
}
else
{
return;
}
}
protected void NextBtn_MouseLeave(object sender, MouseEventArgs e)
{
if (this.currentMedia != null && this.currentMedia.Index < this.lstChoosed.Items.Count)
{
NextButton_MouseLeave.Begin();
}
else
{
return;
}
}
// ----上一个按钮事件
protected void PrevBtn_MouseEnter(object sender, MouseEventArgs e)
{
if (this.currentMedia!=null && this.currentMedia.Index > 1)
{
PreviousButton_MouseEnter.Begin();
}
else
{
return;
}
}
protected void PrevBtn_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (this.currentMedia != null && this.currentMedia.Index > 1)
{
PreviousButton_MouseDown.Begin();
PreviousButton_MouseLeave.Begin();
this.VideoWindow.Play();
}
else
{
return;
}
}
protected void PrevBtn_MouseLeave(object sender, MouseEventArgs e)
{
if (this.currentMedia != null && this.currentMedia.Index > 1)
{
PreviousButton_MouseLeave.Begin();
}
else
{
return;
}
}
//================end ====================
/// <summary>
/// 从播放列表中删除
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnDel_Click(object sender, RoutedEventArgs e)
{
if (lstChoosed.SelectedIndex < 0)
{
lstChoosed.SelectedIndex = 0;
}
lstChoosed.Items.RemoveAt(lstChoosed.SelectedIndex);
}
/// <summary>
/// 关闭弹出框
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnClose_Click(object sender, RoutedEventArgs e)
{
pp.IsOpen = false;
PlayerBox.IsHitTestVisible = true;
}
/// <summary>
/// /选择清单中的一项到播放列表中
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnChoose_Click(object sender, RoutedEventArgs e)
{
if (lstChoosed.Items.Count > C_PlayerListMax)
{
////弹出框口
//方案一
// System.Windows.Browser.HtmlPage.Window.Alert("hello!");
//方案二
pp.Child = this.CreatePopChild();
pp.HorizontalOffset = 200;
pp.VerticalOffset = 100;
pp.IsOpen = true;
PlayerBox.IsHitTestVisible = false;
return;
}
System.Windows.Controls.Primitives.ToggleButton btnObj = (System.Windows.Controls.Primitives.ToggleButton)sender;
Int32 mediaIdentity = Convert.ToInt32(btnObj.DataContext);
SV.Model.MP3 mp3 = SV.DAL.DataAccess.getMP3ById(mediaIdentity);
//产生一个FrameworkElement
StackPanel sp = new StackPanel();
sp.Orientation = Orientation.Horizontal;
sp.DataContext = mp3.Identity;
TextBlock txtIndex = new TextBlock();
txtIndex.Text = (lstChoosed.Items.Count + 1).ToString();
txtIndex.Width = 20;
txtIndex.Height = 22;
txtIndex.HorizontalAlignment = HorizontalAlignment.Center;
TextBlock txtTitle = new TextBlock();
txtTitle.Text = mp3.Title;
txtTitle.Width = 140;
txtTitle.Height = 22;
txtTitle.HorizontalAlignment = HorizontalAlignment.Left;
TextBlock txtArtist = new TextBlock();
txtArtist.Text = mp3.Artist;
txtArtist.Width = 70;
txtArtist.Height = 22;
txtArtist.HorizontalAlignment = HorizontalAlignment.Center;
Button btnPlay = new Button();
btnPlay.Content = "播放";
btnPlay.DataContext = mp3.Identity;
btnPlay.Width = 30;
btnPlay.Height = 20;
btnPlay.Padding = new Thickness(0);
btnPlay.FontSize = 11;
Button btnDel = new Button();
btnDel.Content = "删除";
btnDel.DataContext = mediaIdentity;
btnDel.Width = 30;
btnDel.Height = 20;
btnDel.Click += new RoutedEventHandler(btnDel_Click);
btnDel.Padding = new Thickness(0);
btnDel.FontSize = 11;
sp.Children.Add(txtIndex);
sp.Children.Add(txtTitle);
sp.Children.Add(txtArtist);
sp.Children.Add(btnPlay);
sp.Children.Add(btnDel);
lstChoosed.Items.Add(sp);
}
#endregion
#region 动态创建分页控件
/// <summary>
/// 创建分页模块
/// </summary>
/// <param name="recordCount">记录总数</param>
/// <param name="pageSize">页面大小</param>
private void createPagerTemplement(Int32 recordCount, Int32 pageSize)
{
int pageCount = 0;
List<Int32> indexArray = new List<int>();
pageCount = recordCount % pageSize == 0 ? recordCount / pageSize : recordCount / pageSize + 1;
if (pageCount >= C_pagingButtonCount)
{
for (int i = 0; i < C_pagingButtonCount; i++)
{
indexArray.Add(i + 1);
}
}
else
{
for (int j = 0; j < pageCount; j++)
{
indexArray.Add(j + 1);
}
}
createPagerControl(indexArray.ToArray());
}
private void createPagerControl(Int32[] indexArray)
{
txtKey.Text = "haha!";
//box
pagerBox.Children.Clear();
if (indexArray[0] > C_pagingButtonCount)
{
Canvas preControl = new Canvas();
preControl.Width = 20;
preControl.Height = 20;
//bg
Rectangle preControlBg = new Rectangle();
preControlBg.Width = 20;
preControlBg.Height = 20;
preControlBg.Fill = new SolidColorBrush(Colors.Gray);
//textblock
TextBlock preTxt = new TextBlock();
preTxt.FontSize = 11;
//txt.Foreground = (SolidColorBrush)"Red";
preTxt.Width = 20;
preTxt.Height = 20;
preTxt.HorizontalAlignment = HorizontalAlignment.Center;
preTxt.VerticalAlignment = VerticalAlignment.Center;
//add
preTxt.Text = "<<";
preControl.DataContext = indexArray[0];
preControl.Children.Add(preControlBg);
preControl.Children.Add(preTxt);
preControl.MouseLeftButtonDown += new MouseButtonEventHandler(pagerPrev);
pagerBox.Children.Add(preControl);
}
foreach (int index in indexArray)
{
//box
Canvas indexControl = new Canvas();
indexControl.Width = 20;
indexControl.Height = 20;
//bg
Rectangle controlBg = new Rectangle();
controlBg.Width = 20;
controlBg.Height = 20;
controlBg.Fill = new SolidColorBrush(Colors.Gray);
//textblock
TextBlock txt = new TextBlock();
txt.FontSize = 11;
//txt.Foreground = (SolidColorBrush)"Red";
txt.Width = 20;
txt.Height = 20;
txt.HorizontalAlignment = HorizontalAlignment.Center;
txt.VerticalAlignment = VerticalAlignment.Center;
//add
txt.Text = index.ToString();
indexControl.DataContext = index;
indexControl.Children.Add(controlBg);
indexControl.Children.Add(txt);
indexControl.MouseLeftButtonDown += new MouseButtonEventHandler(paging);
pagerBox.Children.Add(indexControl);
}
//box
if (indexArray[indexArray.Length - 1] * C_pageSize < recordCount)
{
Canvas downControl = new Canvas();
downControl.Width = 20;
downControl.Height = 20;
//bg
Rectangle downControlBg = new Rectangle();
downControlBg.Width = 20;
downControlBg.Height = 20;
downControlBg.Fill = new SolidColorBrush(Colors.Gray);
//textblock
TextBlock downTxt = new TextBlock();
downTxt.FontSize = 11;
//txt.Foreground = (SolidColorBrush)"Red";
downTxt.Width = 20;
downTxt.Height = 20;
downTxt.HorizontalAlignment = HorizontalAlignment.Center;
downTxt.VerticalAlignment = VerticalAlignment.Center;
//add
downTxt.Text = ">>";
downControl.DataContext = indexArray[indexArray.Length - 1];
downControl.Children.Add(downControlBg);
downControl.Children.Add(downTxt);
downControl.MouseLeftButtonDown += new MouseButtonEventHandler(pagerNext);
pagerBox.Children.Add(downControl);
}
}
protected void paging(object sender, EventArgs e)
{
Canvas cs = (Canvas)sender;
this.currentPageIndex = Convert.ToInt32(cs.DataContext.ToString());
lstboxBind(currentPageIndex, C_pageSize);
txtKey.Text = this.currentPageIndex.ToString();
}
protected void pagerPrev(object sender, EventArgs e)
{
Canvas cs = (Canvas)sender;
int minIndex = Convert.ToInt32(cs.DataContext.ToString());
if (minIndex > C_pagingButtonCount)
{
List<int> indexArray = new List<int>();
for (Int32 j = 0; j < C_pagingButtonCount; j++)
{
indexArray.Add(minIndex - C_pagingButtonCount + j);
}
createPagerControl(indexArray.ToArray());
lstboxBind(indexArray[indexArray.Count - 1], C_pageSize);
}
else
{
return;
}
}
protected void pagerNext(object sender, EventArgs e)
{
Canvas cs = (Canvas)sender;
int maxIndex = Convert.ToInt32(cs.DataContext.ToString());
if (maxIndex * C_pageSize < recordCount)
{
List<int> indexArray = new List<int>();
if ((recordCount - maxIndex * C_pageSize) / C_pageSize < C_pagingButtonCount)
{
Int32 len = (recordCount - maxIndex * C_pageSize) / C_pageSize + 1;
for (int i = 0; i < len; i++)
{
indexArray.Add(maxIndex + 1 + i);
}
}
else
{
for (Int32 j = 0; j < C_pagingButtonCount; j++)
{
indexArray.Add(maxIndex + 1 + j);
}
}
createPagerControl(indexArray.ToArray());
lstboxBind(indexArray[0], C_pageSize);
}
else
{
return;
}
}
#endregion
#region 绑定
private void lstboxBind(Int32 pageIndex, Int32 pageSize)
{
pageSize = C_pageSize;
lstMediaList.ItemsSource = SV.DAL.DataAccess.getMP3ByPage(currentPageIndex, pageSize);
}
#endregion
#region 动态添加控件
/// <summary>
/// 添加弹出窗口内容
/// </summary>
private UIElement CreatePopChild()
{
Canvas cs = new Canvas();
cs.Width = 300;
cs.Height = 300;
Rectangle bg = new Rectangle();
bg.Fill = new SolidColorBrush(Colors.Red);
bg.Opacity = 0.7;
bg.Width = 300;
bg.Height = 300;
bg.RadiusX = 7;
bg.RadiusY = 7;
TextBlock txtMsg = new TextBlock();
txtMsg.Text = "最多不能起过" + C_PlayerListMax.ToString() + "个";
txtMsg.Foreground = new SolidColorBrush(Colors.Black);
//定位
Canvas.SetLeft(txtMsg, 100);
Canvas.SetTop(txtMsg, 100);
Button btnClose = new Button();
btnClose.Width = 70;
btnClose.Height = 20;
btnClose.FontSize = 11;
btnClose.Content = "返回操作";
btnClose.Click += new RoutedEventHandler(btnClose_Click);
btnClose.VerticalAlignment = VerticalAlignment.Center;
Canvas.SetTop(btnClose, 125);
Canvas.SetLeft(btnClose, 100);
cs.HorizontalAlignment = HorizontalAlignment.Center;
cs.VerticalAlignment = VerticalAlignment.Center;
cs.Children.Add(bg);
cs.Children.Add(txtMsg);
cs.Children.Add(btnClose);
return cs;
}
#endregion
}
}

浙公网安备 33010602011771号