2010-03-03 2 views
0

MediaElement가 있는데 어떻게 MediaElement의 "위치"속성을 변경할 때 함수를 호출 할 수 있습니까?WPF mediaelement

위치는 DependencyProperty가 아닙니다.

+0

좋은 시작을 http://stackoverflow.com/questions/869761/wpf-implementing-a-mediaplayer-audio-video-seeker 참조 – kenwarner

답변

0

그래서 난 그냥 비디오 재생을 다음과 슬라이더를 구현하려는 ...하지만 위치 속성은 종속성 속성되지 않습니다 :의

2

당신은 DispatchTimer를 사용할 수 있습니다. 이 기사는이 작업을 수행하는 방법에 대한 좋은 통찰력을 제공합니다. MediaElement and More with WPF.

다음은 내가 작업중인 프로젝트에서 가져온 샘플 코드입니다. 슬라이더 컨트롤을 사용하여 비디오의 위치를 ​​표시하고 사용자가 위치를 변경할 수 있습니다.

나는 약간의 초보자이기도하므로, 그 중 일부가 잘못되었을 수도 있습니다 (의견 섹션의 문제에 자유롭게 의견을 말하십시오 :).

private DispatcherTimer mTimer; 
private bool mIsDragging = false; 
private bool mTick = false; 
private void UserControl_Loaded(object sender, RoutedEventArgs e) 
{ 
    medPlayer.Play(); 
    medPlayer.Stop(); 
    mTimer = new DispatcherTimer(); 
    mTimer.Interval = TimeSpan.FromMilliseconds(100); 
    mTimer.Tick += new EventHandler(mTimer_Tick); 
    mTimer.Start(); 
} 
void mTimer_Tick(object sender, EventArgs e) 
{ 
    if (!mIsDragging) 
    { 
     try 
     { 
      mTick = true; 
      sldPosition.Value = medPlayer.Position.TotalMilliseconds; 
     } 
     finally 
     { 
      mTick = false; 
     } 
    } 
} 
private void sldPosition_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e) 
{ 
    mIsDragging = true; 
    medPlayer.Pause(); 
} 
private void sldPosition_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e) 
{ 
    mIsDragging = false; 
    if (chkPlay.IsChecked.Value) 
     medPlayer.Play(); 
} 
private void sldPosition_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) 
{ 
    var pos = TimeSpan.FromMilliseconds(e.NewValue); 
    lblPosition.Content = string.Format("{0:00}:{1:00}", pos.Minutes, pos.Seconds); 
    if (!mTick) 
    { 
     medPlayer.Position = TimeSpan.FromMilliseconds(sldPosition.Value); 
     if (medPlayer.Position == medPlayer.NaturalDuration.TimeSpan) 
     { 
      chkPlay.IsChecked = false; 
      medPlayer.Stop(); 
     } 
    } 
} 
관련 문제