کنترل 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 برای نمایش وضعیت پخش داریم. زمانی که برنامه را اجرا می‌کنیم یک تایمر شروع به کار می‌کند و در هر ثانیه وضعیت ویدئو (مدت زمان پخش شده از ویدئو) را نمایش می‌دهد: