■ MediaElement 엘리먼트를 사용해 미디어의 재생/중지/중단/볼륨/속도를 제어하는 방법을 보여준다.
▶ MainWindow.xaml
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
<Window x:Class="TestProject.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="800" Height="600" Title="TestProject" Background="Black" FontFamily="나눔고딕코딩" FontSize="16"> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <MediaElement Name="mediaElement" Source="MEDIA\sample.avi" Width="600" Height="400" LoadedBehavior="Manual" UnloadedBehavior="Stop" /> <StackPanel HorizontalAlignment="Center" Margin="0 10 0 0" Orientation="Horizontal"> <Image Name="playImage" Source="IMAGE\play.png" /> <Image Name="pauseImage" Margin="10 0 0 0" Source="IMAGE\pause.png" /> <Image Name="stopImage" Margin="10 0 0 0" Source="IMAGE\stop.png" /> <TextBlock VerticalAlignment="Center" Margin="10 0 0 0" Foreground="White"> Volume </TextBlock> <Slider Name="volumeSlider" VerticalAlignment="Center" Margin="10 5 0 0" Width="70" Minimum="0" Maximum="1" Value="0.5" /> <TextBlock VerticalAlignment="Center" Margin="10 0 0 0" Foreground="White"> Speed </TextBlock> <Slider Name="speedRatioSlider" VerticalAlignment="Center" Margin="10 5 0 0" Width="70" Value="1" /> <TextBlock VerticalAlignment="Center" Margin="10 0 0 0" Foreground="White"> Seek To </TextBlock> <Slider Name="seekToSlider" VerticalAlignment="Center" Margin="10 5 0 0" Width="70" /> </StackPanel> </StackPanel> </Window> |
▶ MainWindow.xaml.cs
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
using System; using System.Windows; using System.Windows.Input; namespace TestProject { /// <summary> /// 메인 윈도우 /// </summary> public partial class MainWindow : Window { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - MainWindow() /// <summary> /// 생성자 /// </summary> public MainWindow() { InitializeComponent(); this.mediaElement.MediaOpened += mediaElement_MediaOpened; this.mediaElement.MediaEnded += mediaElement_MediaEnded; this.playImage.MouseDown += playImage_MouseDown; this.pauseImage.MouseDown += pauseImage_MouseDown; this.stopImage.MouseDown += stopImage_MouseDown; this.volumeSlider.ValueChanged += volumeSlider_ValueChanged; this.speedRatioSlider.ValueChanged += speedRatioSlider_ValueChanged; this.seekToSlider.ValueChanged += seekToSlider_ValueChanged; } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Private //////////////////////////////////////////////////////////////////////////////// Event #region 미디어 엘리먼트 미디어 오픈시 처리하기 - mediaElement_MediaOpened(sender, e) /// <summary> /// 미디어 엘리먼트 미디어 오픈시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void mediaElement_MediaOpened(object sender, EventArgs e) { this.seekToSlider.Maximum = this.mediaElement.NaturalDuration.TimeSpan.TotalMilliseconds; } #endregion #region 미디어 엘리먼트 미디어 종료시 처리하기 - mediaElement_MediaEnded(sender, e) /// <summary> /// 미디어 엘리먼트 미디어 종료시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void mediaElement_MediaEnded(object sender, EventArgs e) { this.mediaElement.Stop(); } #endregion #region 재생 이미지 마우스 DOWN 처리하기 - playImage_MouseDown(sender, e) /// <summary> /// 재생 이미지 마우스 DOWN 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void playImage_MouseDown(object sender, MouseButtonEventArgs e) { this.mediaElement.Play(); SetMediaElementData(); } #endregion #region 중지 이미지 마우스 DOWN 처리하기 - pauseImage_MouseDown(sender, e) /// <summary> /// 중지 이미지 마우스 DOWN 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void pauseImage_MouseDown(object sender, MouseButtonEventArgs e) { this.mediaElement.Pause(); } #endregion #region 중단 이미지 마우스 DOWN 처리하기 - stopImage_MouseDown(sender, e) /// <summary> /// 중단 이미지 마우스 DOWN 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void stopImage_MouseDown(object sender, MouseButtonEventArgs e) { this.mediaElement.Stop(); } #endregion #region 볼륨 슬라이더 값 변경시 처리하기 - volumeSlider_ValueChanged(sender, e) /// <summary> /// 볼륨 슬라이더 값 변경시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void volumeSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { this.mediaElement.Volume = (double)this.volumeSlider.Value; } #endregion #region 속도 비율 슬라이더 값 변경시 처리하기 - speedRatioSlider_ValueChanged(sender, e) /// <summary> /// 속도 비율 슬라이더 값 변경시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void speedRatioSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { this.mediaElement.SpeedRatio = (double)this.speedRatioSlider.Value; } #endregion #region 탐색 슬라이더 값 변경시 처리하기 - seekToSlider_ValueChanged(sender, e) /// <summary> /// 탐색 슬라이더 값 변경시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void seekToSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { TimeSpan timeSpan = new TimeSpan(0, 0, 0, 0, (int)this.seekToSlider.Value); this.mediaElement.Position = timeSpan; } #endregion //////////////////////////////////////////////////////////////////////////////// Event #region 미디어 엘리먼트 데이터 설정하기 - SetMediaElementData() /// <summary> /// 미디어 엘리먼트 데이터 설정하기 /// </summary> private void SetMediaElementData() { this.mediaElement.Volume = (double)this.volumeSlider.Value; this.mediaElement.SpeedRatio = (double)this.speedRatioSlider.Value; } #endregion } } |