کنترل MediaElement
با استفاده از کنترل MediaElement میتوانید یک فایل صوتی یا یک ویدئو را در یک قالب مستطیلی شکل نمایش دهید. کنترل MediaElement بیشتر امکاناتی که از یک پخش کننده صوتی یا تصویری انتظار دارید مانند قابلیت پخش، مکث و توقف Media ، تنظیم صدا و خاصیتهایی برای تغییر سرعت پخش را دارا میباشد. در مثال زیر نحوه نمایش یک ویدئو ساده نمایش داده شده است :
<Grid> <MediaElement Source="D:\SampleVideo.mp4" /> </Grid>
در برنامه بالا ما آدرس یک ویدئو که در درایو D قرار دارد و نام آن SampleVideo.mp4 است را در خاصیت Source کنترل MediaElement نوشتهایم. زمانی که این برنامه را اجرا کنید یک خروجی شبیه زیر را نمایش میدهد (البته ممکن است ویدئو شما متفاوت باشد):
همانطور میبینید فقط با یک خط توانستیم یک ویدئو را در پنجره نمایش دهیم.
کار با اندازه ویدئو
با استفاده از خصیصه Stretch میتوانید ابعاد ویدئو خود را در MediaElement مشخص کنید:
در جدول زیر میتوانید کاربرد هر یک از این مقادیر آمده است:
مقدار | توضیحات |
Fill | این مقدار باعث میشود تا ویدئو بدون حفظ نسبت عرض و ارتفاع، تمام فضای Layout را پوشش دهد. به عبارت دیگر اندازه عرض و ارتفاع ویدئو را بدون توجه به نسبت آنها تغییر میدهد. |
None | این مقدار باعث میشود تا ویدئو با اندازه اصلی نمایش داده شود. اگر ابعاد ویدئو بزرگتر از ابعاد Layout باشد، آنگاه فقط به اندازه ابعاد Layout ویدئو را نمایش میدهد و بخش اضافی را حذف میکند. |
Uniform | مقدار پیش فرض خصیصه Stretch است و باعث میشود تا ویدئو، تمام فضای Layout را با حفظ نسبت عرض و ارتفاع پوشش دهد. این مقدار از کشیده شدن و برش خوردن ویدئو جلوگیری کرده و نسبت عرض و ارتفاع آن را حفظ میکند. |
UniformToFill | این مقدار باعث میشود تا ویدئو، تمام فضای Layout را با حفظ نسبت عرض و ارتفاع پوشش دهد. اما اگر نسبت عرض و ارتفاع ویدئو اصلی متفاوت از نسبت عرض و ارتفاع Layout باشد، بخش اضافی از ویدئو بریده میشود. |
Fill
None
Uniform
UniformToFill
کنترل کردن MediaElement/MediaPlayer
همانطور که در مثال قبلی مشاهده کردید، زمانی که برنامه را اجرا میکنیم، بلافاصله ویدئو شروع به پخش میکند. برای اینکه این رفتار را تغییر دهیم میتوانیم از خصیصه LoadedBehavior استفاده کنیم. برای درک بهتر به مثال زیر توجه کنید :
<Grid Margin="10"> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <MediaElement Source="D:\SampleVideo.mp4" LoadedBehavior="Manual" Name="mediaPlayer" /> <StackPanel Grid.Row="1"> <Label Name="labelStatus" Content="Not playing..." HorizontalContentAlignment="Center" Margin="5" /> <WrapPanel HorizontalAlignment="Center"> <Button Name="buttonPlay" Padding="15, 5" Click="buttonPlay_Click"> Play </Button> <Button Name="buttonPause" Padding="15, 5" Click="buttonPause_Click">Pause</Button> <Button Name="buttonStop" Padding="15, 5" Click="buttonStop_Click"> Stop </Button> </WrapPanel> </StackPanel> </Grid>
در قسمت مربوط به کدنویسی سی شارپ هم کدهای زیر را بنویسید:
1: using System; 2: using System.Windows; 3: using System.Windows.Threading; 4: 5: namespace WpfApp2 6: { 7: /// <summary> 8: /// Interaction logic for MainWindow.xaml 9: /// </summary> 10: public partial class MainWindow : Window 11: { 12: public MainWindow() 13: { 14: InitializeComponent(); 15: 16: DispatcherTimer timer = new DispatcherTimer(); 17: timer.Interval = TimeSpan.FromSeconds(1); 18: timer.Tick += timer_Tick; 19: timer.Start(); 20: } 21: 22: void timer_Tick(object sender, EventArgs e) 23: { 24: if (mediaPlayer.Source != null) 25: { 26: if (mediaPlayer.NaturalDuration.HasTimeSpan) 27: { 28: labelStatus.Content = String.Format("{0} / {1}", 29: mediaPlayer.Position.ToString(@"mm\:ss"), 30: mediaPlayer.NaturalDuration.TimeSpan.ToString(@"mm\:ss")); 31: } 32: } 33: else 34: { 35: labelStatus.Content = "No file selected..."; 36: } 37: } 38: 39: private void buttonPlay_Click(object sender, RoutedEventArgs e) 40: { 41: mediaPlayer.Play(); 42: } 43: 44: private void buttonPause_Click(object sender, RoutedEventArgs e) 45: { 46: mediaPlayer.Pause(); 47: } 48: 49: private void buttonStop_Click(object sender, RoutedEventArgs e) 50: { 51: mediaPlayer.Stop(); 52: } 53: } 54: }
زمانی که این برنامه اجرا کنیم خروجی زیر را نمایش میدهد:
در این برنامه سه دکمه Play ، Pause و Stop را برای پخش، مکث و توقف ویدئو وجود دارد. همچنین یک Label برای نمایش وضعیت پخش داریم. زمانی که برنامه را اجرا میکنیم یک تایمر شروع به کار میکند و در هر ثانیه وضعیت ویدئو (مدت زمان پخش شده از ویدئو) را نمایش میدهد: