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

推荐订阅源

Cisco Talos Blog
Cisco Talos Blog
The Hacker News
The Hacker News
L
LINUX DO - 最新话题
P
Privacy & Cybersecurity Law Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
S
Secure Thoughts
S
Schneier on Security
MyScale Blog
MyScale Blog
月光博客
月光博客
U
Unit 42
www.infosecurity-magazine.com
www.infosecurity-magazine.com
AI
AI
N
News and Events Feed by Topic
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
爱范儿
爱范儿
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
S
Securelist
B
Blog RSS Feed
Spread Privacy
Spread Privacy
H
Help Net Security
Know Your Adversary
Know Your Adversary
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
V
V2EX
MongoDB | Blog
MongoDB | Blog
GbyAI
GbyAI
博客园 - 叶小钗
D
DataBreaches.Net
T
Troy Hunt's Blog
Project Zero
Project Zero
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
P
Privacy International News Feed
The Last Watchdog
The Last Watchdog
K
Kaspersky official blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Latest news
Latest news
S
Security @ Cisco Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V2EX - 技术
V2EX - 技术
Hacker News: Ask HN
Hacker News: Ask HN
The GitHub Blog
The GitHub Blog
C
Cisco Blogs
C
CERT Recently Published Vulnerability Notes
Attack and Defense Labs
Attack and Defense Labs
T
Threatpost
O
OpenAI News
Recorded Future
Recorded Future
Help Net Security
Help Net Security
罗磊的独立博客

博客园 - dalgleish

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 20 - WindowsMenu- CenterScreen C# Avalonia 19- DataBinding- DataGridGrouping C# Avalonia 19- DataBinding- DirectoryTreeView C# Avalonia 19- DataBinding- BoundTreeView C# Avalonia 19- DataBinding- CustomListViewTest
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