1. Cel lekcji
Celem lekcji jest:
- poznanie obsługi multimediów w aplikacji WPF,
- nauczenie się odtwarzania plików audio i wideo,
- zapoznanie się z kontrolką MediaElement,
- praca na plikach lokalnych (offline – jak na egzaminie).
Po lekcji uczeń:
- potrafi dodać pliki multimedialne do projektu,
- umie sterować odtwarzaniem audio i video,
- rozumie różnicę między logiką aplikacji a interfejsem.
2. Tworzenie projektu
- Otwórz Visual Studio
- Nowy projekt
- Wybierz: WPF App (.NET)
- Nazwa projektu:
AVWpfApp - Zatwierdź
3. Dodanie plików multimedialnych do projektu
Na egzaminie nie ma Internetu, więc pliki muszą być w projekcie.
3.1. Dodajemy pliki
- Kliknij prawym na projekt → Dodaj → Istniejący element
- Dodaj:
audio1.mp3audio2.mp3video1.mp4video2.mp4
Najlepiej wrzucić je do folderu:
Media/
├─ Audio/
└─ Video/
3.2. Właściwości plików (WAŻNE!)
Dla każdego pliku ustaw:
- Build Action →
Content - Copy to Output Directory →
Copy always
Dzięki temu pliki znajdą się w folderze aplikacji po uruchomieniu.
4. Koncepcja aplikacji
Interfejs podzielony na dwie części:
| Lewa strona | Prawa strona |
|---|---|
| AUDIO | VIDEO |
| Lista utworów | Lista filmów |
| Przyciski Play / Stop | Przyciski Play / Stop |
Jedna aplikacja, dwa MediaElementy.
5. Interfejs – MainWindow.xaml
Plik: MainWindow.xaml
<Window x:Class="AVWpfApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="AVWpfApp - Audio i Video"
Height="500" Width="800">
<Grid Margin="10">
<!-- Podział okna na dwie kolumny -->
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- ================== AUDIO ================== -->
<StackPanel Grid.Column="0" Margin="10">
<TextBlock Text="AUDIO"
FontSize="18"
FontWeight="Bold"
Margin="0,0,0,10"/>
<!-- Lista plików audio -->
<ListBox x:Name="lstAudio"
Height="120"/>
<!-- Przyciski sterowania audio -->
<Button Content="Odtwórz audio"
Margin="0,10,0,0"
Click="btnPlayAudio_Click"/>
<Button Content="Stop audio"
Margin="0,5,0,0"
Click="btnStopAudio_Click"/>
<!-- Odtwarzacz audio -->
<MediaElement x:Name="audioPlayer"
LoadedBehavior="Manual"/>
</StackPanel>
<!-- ================== VIDEO ================== -->
<StackPanel Grid.Column="1" Margin="10">
<TextBlock Text="VIDEO"
FontSize="18"
FontWeight="Bold"
Margin="0,0,0,10"/>
<!-- Lista plików video -->
<ListBox x:Name="lstVideo"
Height="120"/>
<!-- Przyciski sterowania video -->
<Button Content="Odtwórz video"
Margin="0,10,0,0"
Click="btnPlayVideo_Click"/>
<Button Content="Stop video"
Margin="0,5,0,0"
Click="btnStopVideo_Click"/>
<!-- Odtwarzacz video -->
<MediaElement x:Name="videoPlayer"
Height="200"
LoadedBehavior="Manual"/>
</StackPanel>
</Grid>
</Window>
6. Logika aplikacji – MainWindow.xaml.cs
Plik: MainWindow.xaml.cs
using System;
using System.IO;
using System.Windows;
namespace AVWpfApp
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// Po uruchomieniu aplikacji ładujemy listy plików
ZaladujAudio();
ZaladujVideo();
}
// ================= AUDIO =================
// Wczytanie plików audio do listy
private void ZaladujAudio()
{
lstAudio.Items.Add("audio1.mp3");
lstAudio.Items.Add("audio2.mp3");
}
// Odtwarzanie wybranego pliku audio
private void btnPlayAudio_Click(object sender, RoutedEventArgs e)
{
if (lstAudio.SelectedItem == null)
{
MessageBox.Show("Wybierz plik audio.");
return;
}
string sciezka =
Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
"Media\\Audio",
lstAudio.SelectedItem.ToString());
audioPlayer.Source = new Uri(sciezka);
audioPlayer.Play();
}
// Zatrzymanie audio
private void btnStopAudio_Click(object sender, RoutedEventArgs e)
{
audioPlayer.Stop();
}
// ================= VIDEO =================
// Wczytanie plików video do listy
private void ZaladujVideo()
{
lstVideo.Items.Add("video1.mp4");
lstVideo.Items.Add("video2.mp4");
}
// Odtwarzanie wybranego pliku video
private void btnPlayVideo_Click(object sender, RoutedEventArgs e)
{
if (lstVideo.SelectedItem == null)
{
MessageBox.Show("Wybierz plik video.");
return;
}
string sciezka =
Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
"Media\\Video",
lstVideo.SelectedItem.ToString());
videoPlayer.Source = new Uri(sciezka);
videoPlayer.Play();
}
// Zatrzymanie video
private void btnStopVideo_Click(object sender, RoutedEventArgs e)
{
videoPlayer.Stop();
}
}
}
7. Wyjaśnienie kluczowych elementów (EGZAMIN)
MediaElement
- kontrolka WPF do obsługi audio i video
- nie wymaga NuGet
- działa offline
<MediaElement LoadedBehavior="Manual"/>
Manual – sterowanie z poziomu kodu (Play(), Stop())
Path.Combine + BaseDirectory
AppDomain.CurrentDomain.BaseDirectory
- zwraca folder, w którym działa aplikacja
- egzaminacyjne, poprawne rozwiązanie
- działa niezależnie od komputera
Play / Stop
audioPlayer.Play();
audioPlayer.Stop();
To są najważniejsze metody MediaElement.
8. Co potrafi aplikacja AVWpfApp
✔ odtwarza pliki audio
✔ odtwarza pliki video
✔ działa bez Internetu
✔ używa wbudowanych kontrolek WPF
✔ ma czytelny interfejs
✔ spełnia wymagania INF.04
9. Jak to można rozwinąć (opcjonalnie)
- pauza (
Pause()) - regulacja głośności
- pasek postępu
- zmiana źródła w trakcie odtwarzania

