惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tailwind CSS Blog
J
Java Code Geeks
Microsoft Azure Blog
Microsoft Azure Blog
GbyAI
GbyAI
爱范儿
爱范儿
量子位
Martin Fowler
Martin Fowler
V
V2EX
博客园 - 三生石上(FineUI控件)
I
InfoQ
MongoDB | Blog
MongoDB | Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
N
Netflix TechBlog - Medium
D
DataBreaches.Net
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Last Week in AI
Last Week in AI
U
Unit 42
Apple Machine Learning Research
Apple Machine Learning Research
H
Help Net Security
T
The Blog of Author Tim Ferriss
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
Engineering at Meta
Engineering at Meta

博客园 - dalgleish

C# Avalonia 23- OpenGL- HitTestTorus Helix C++引擎公测 - 使用ImGUI C# Avalonia 23- OpenGL- VideoIn3D C# Avalonia 23- OpenGL- Materials Helix C++引擎公测 C# Avalonia 23- OpenGL- CubeMesh C# Avalonia 23- OpenGL- TriangleGlView Helix C++ 跨平台内存安全扩展 C# Avalonia 23- OpenGL- BasicOpenGL C# Avalonia 23- OpenGL- 例子通用类 C# Avalonia 22- SoundAndVideo- SpeechVoiceTest C# Avalonia 22- SoundAndVideo- SpeechRecognition C# Avalonia 22- SoundAndVideo- SpeechSynthesis C# Avalonia 22- SoundAndVideo- SoundPlayerTest C# Avalonia 21- MenusAndToolbars- RibbonTest C# Avalonia 21- MenusAndToolbars- ProportionalStatusBar C# Avalonia 21- MenusAndToolbars- BasicToolbar C# Avalonia 21- MenusAndToolbars- ToolBar/Ribbon开源项目介绍和修复 C# Avalonia 21- MenusAndToolbars- SidebarMenu C# Avalonia 21- MenusAndToolbars- MixedMenus C# Avalonia 20 - WindowsMenu- 魔改Hyperlink - 使用例子 C# Avalonia 20 - WindowsMenu- 魔改Hyperlink C# Avalonia 20 - WindowsMenu- WebViewTest C# Avalonia 20 - WindowsMenu- WebView C# Avalonia 20 - WindowsMenu- ModernWindowTest C# Avalonia 20 - WindowsMenu- ModernWindow C# Avalonia 20 - WindowsMenu- TransparentWithShapes C# Avalonia 20 - WindowsMenu- TransparentBackground C# Avalonia 20 - WindowsMenu- OpenFileTest C# Avalonia 20 - WindowsMenu- SavePostion
C# Avalonia 22- SoundAndVideo- CodePlayback
dalgleish · 2026-07-15 · via 博客园 - dalgleish

CodePlayback.axaml代码

<Window xmlns="https://github.com/avaloniaui"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
        x:Class="AvaloniaUI.CodePlayback"
        Title="CodePlayback">
    <Grid Margin="10" RowDefinitions="auto,auto,auto,auto">
        <!-- 播放器 -->
        <MediaElement x:Name="media"
                         Source="avares://AvaloniaUI/Resources/Sounds/test.mp3"
                         AutoPlay="False"
                         Stretch="Uniform"/>

        <!-- 按钮 -->
        <StackPanel Grid.Row="1" Orientation="Horizontal" Spacing="6" Margin="0,8,0,0">
            <Button Click="CmdPlay_Click" Padding="8,4">Play</Button>
            <Button Click="CmdStop_Click" Padding="8,4">Stop</Button>
            <Button Click="CmdPause_Click" Padding="8,4">Pause</Button>
            <ToggleSwitch Content="Mute"
                          Margin="10,0,0,0"
                          IsChecked="{Binding ElementName=media, Path=IsMuted, Mode=TwoWay}"/>
        </StackPanel>

        <!-- 参数区 -->
        <Grid Grid.Row="2" Margin="0,10,0,0"
              RowDefinitions="auto,auto,auto"
              ColumnDefinitions="auto,*">

            <TextBlock Grid.Row="0" Grid.Column="0" Margin="0,4,8,4" Text="Volume:"/>
            <Slider Grid.Row="0" Grid.Column="1"
                    Minimum="0" Maximum="100"
                    Value="{Binding ElementName=media, Path=Volume, Mode=TwoWay}"/>

            <TextBlock Grid.Row="1" Grid.Column="0" Margin="0,4,8,4" Text="Speed:"/>
            <Slider Grid.Row="1" Grid.Column="1"
                    Minimum="0.5" Maximum="2"
                    Value="{Binding ElementName=media, Path=Rate, Mode=TwoWay}"/>

            <TextBlock Grid.Row="2" Grid.Column="0" Margin="0,14,8,4" Text="Seek To:"/>
            <Slider x:Name="sliderPosition"
                    Grid.Row="2" Grid.Column="1"
                    Margin="0,14,0,0"
                    Minimum="0"
                    Maximum="{Binding ElementName=media, Path=Length}"
                    Value="{Binding ElementName=media, Path=Time, Mode=TwoWay}"/>
        </Grid>

        <!-- 时间显示 -->
        <TextBlock Grid.Row="3" x:Name="lblTime" Margin="0,10,0,0"/>
    </Grid>
</Window>

CodePlayback.axaml.cs代码

using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using System;

namespace AvaloniaUI;

public partial class CodePlayback : Window
{
    public CodePlayback()
    {
        InitializeComponent();
        // 实时刷新时间文本
        media.TimeChanged += (_, _) => UpdateTimeText();
        media.LengthChanged += (_, _) => UpdateTimeText();
        media.Playing += (_, _) => UpdateTimeText();
        media.Stopped += (_, _) => UpdateTimeText();

        Closed += (_, _) => media.Dispose();
    }
    private void CmdPlay_Click(object? sender, RoutedEventArgs e) => media.Play();
    private void CmdPause_Click(object? sender, RoutedEventArgs e) => media.Pause();
    private void CmdStop_Click(object? sender, RoutedEventArgs e) => media.Stop();

    private void UpdateTimeText()
    {
        var pos = TimeSpan.FromMilliseconds(Math.Max(0, media.Time));
        var len = TimeSpan.FromMilliseconds(Math.Max(0, media.Length));
        lblTime.Text = $"{pos:mm\\:ss} / {len:mm\\:ss}";
    }
}

运行效果

image