MediaElement
Audio und Video über den Spieler des Systems (macOS: AVPlayer): Quelle, Abspielen, Pause, Stopp, Stelle, Lautstärke, Stumm, Tempo, Schleife. MediaTransportControls bedient ein MediaElement mit Leertaste und Pfeilen. Ohne Spieler im Host steht ein Platzhalter.


KXAML
MedienSeite.kxaml
<StackPanel xmlns="https://ui.kuonen.org/kxaml"
xmlns:x="https://ui.kuonen.org/kxaml/x"
x:Class="Kuonen.UI.Galerie.Seiten.MedienVorfuehrung"
Spacing="8">
<!-- Verbunden wird in MedienSeite.Fuelle, derselben Methode wie die C#-Fassung. -->
<TextBox x:Name="Adresse" Width="480" />
<MediaElement x:Name="Medien" Width="640" Height="360" />
<MediaTransportControls x:Name="Steuerung" Width="640" />
<TextBlock x:Name="Status" />
</StackPanel>MedienSeite.kxaml.cs
using Kuonen.UI;
namespace Kuonen.UI.Galerie.Seiten;
public sealed partial class MedienSeite
{
protected override Func<UIElement>? KxamlFabrik => () => new MedienVorfuehrung();
}
/// <summary>KXAML-Fassung der Seite MediaElement: das Gerüst steht in MedienSeite.kxaml, verbunden wird in MedienSeite.Fuelle.</summary>
public sealed partial class MedienVorfuehrung
{
public MedienVorfuehrung()
{
InitializeComponent();
MedienSeite.Fuelle(Adresse, Medien, Steuerung, Status);
}
}C#
MedienSeite.cs
using Kuonen.UI;
using Kuonen.UI.Controls;
using Kuonen.UI.Eingabe;
using Kuonen.UI.Layout;
namespace Kuonen.UI.Galerie.Seiten;
/// <summary>Galerie-Seite: MediaElement mit MediaTransportControls (Plan 6j).</summary>
public sealed partial class MedienSeite : GalerieSeite
{
public override string Titel => "MediaElement";
public override string Beschreibung =>
"Audio und Video über den Spieler des Systems (macOS: AVPlayer): Quelle, Abspielen, Pause, Stopp, Stelle, Lautstärke, Stumm, Tempo, Schleife. " +
"MediaTransportControls bedient ein MediaElement mit Leertaste und Pfeilen. Ohne Spieler im Host steht ein Platzhalter.";
public override string Stichworte => "MediaElement MediaPlayerElement MediaTransportControls Video Audio Abspielen AVPlayer";
public override string Datei => nameof(MedienSeite);
public override UIElement Baue()
{
var seite = new StackPanel { Spacing = 8 };
var adresse = new TextBox { Width = 480 };
var medien = new MediaElement { Width = 640, Height = 360 };
var steuerung = new MediaTransportControls { Width = 640 };
var status = new TextBlock();
Fuelle(adresse, medien, steuerung, status);
seite.Children.Add(adresse);
seite.Children.Add(medien);
seite.Children.Add(steuerung);
seite.Children.Add(status);
return seite;
}
/// <summary>Quelle, Steuerung und Zustandszeile verbinden (auch von der KXAML-Fassung benutzt).</summary>
public static void Fuelle(TextBox adresse, MediaElement medien, MediaTransportControls steuerung, TextBlock status)
{
adresse.Text = "https://ui.kuonen.org/medien/beispiel.mp4";
steuerung.Target = medien;
adresse.KeyDown += (_, e) =>
{
if (e.Key == Key.Enter && Uri.TryCreate(adresse.Text, UriKind.Absolute, out var ziel)) medien.Source = ziel;
};
medien.CurrentStateChanged += (_, _) => status.Text = "Zustand: " + medien.CurrentState;
medien.MediaFailed += (_, grund) => status.Text = "Nicht abspielbar: " + grund;
status.Text = "Adresse eingeben und Eingabe drücken.";
}
}