Zum Inhalt
Kuonen.UI

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.

Vorführung: MediaElementVorführung: MediaElement

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.";
    }
}