우선 전에 썼었던 MediaTimeline과 MediaClock 클래스를 사용하지않았다.
Timeline을 셋팅하고 그 상태서 Clock을 생성하고 그 Clock을 MediaElement와 연결했지만
연결을 하게되면 MediaElement로 제어가 되질않고 미디어엘리먼트의 클락의 컨트롤러로 제어를 해야됐다. 그리고 MediaElement에 position을 지정 해줄수 가 없었다. position을 임의로 지정하게 되면
미디어를 지정하는동안 클락을 변경할 수 없다 라는 오류가 난다.
이것을 해결하기위해서 여러 방법을 써봤는데 해결하지 못하였고
결국 MediaTImeline과 MediaClock을 사용하지 않는 방법을 사용하였다.
해결방법은
DispatcherTimer를 이용하였는데 우선 bool 변수를 하나 선언해서
매초마다 이벤트가 발생해서 미디어 -> 슬라이더바가 변경 될때와
슬라이더바가 움직여서 영상이 바뀔때가 겹치지않게 bool로 제어를 해주었다.
아래와같다~!
bool con = false;
//마우스를 떼면 false로 바뀌고 Tick이 다시 계속 실행된다.
private void timebar_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
con = false;
}
//마우스를 클릭하면 true로 바뀌고
private void timebar_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
con = true;
}
//클릭하면서 true로 바뀌었고 Tick이 발생안한다. 그 때 바를 움직여서 Position을 바꿔놓는다.
private void timebar_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (con)
{
int SliderValue = (int)timebar.Value;
TimeSpan ts = new TimeSpan(0, 0, 0, 0, SliderValue);
mediaElement1.Position = ts;
}
}
//초기값이 false이기 때문에 계속 실행된다.
void timer_Tick(object sender, EventArgs e)
{
if (!con)
{
timebar.Value = mediaElement1.Position.TotalMilliseconds;
TimeSpan ts = new TimeSpan();
ts = mediaElement1.Position;
textBox1.Text = (string)ts.Seconds;
}
}
'.NET > WPF' 카테고리의 다른 글
동적으로 컨트롤 생성하기 (0) | 2010.07.21 |
---|---|
WPF에서 사용자정의컨트롤 쓰기 (0) | 2010.04.26 |
WPF에서 미디어 플레이어 만들기 (1) | 2010.04.19 |
사용자지정과 사용자정의 컨트롤 차이 (0) | 2010.04.18 |
의존속성 (0) | 2010.04.16 |