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

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
Vercel News
Vercel News
N
Netflix TechBlog - Medium
M
MIT News - Artificial intelligence
F
Full Disclosure
GbyAI
GbyAI
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Docker
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
D
DataBreaches.Net
Hugging Face - Blog
Hugging Face - Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
大猫的无限游戏
大猫的无限游戏
Hacker News: Ask HN
Hacker News: Ask HN
V
Visual Studio Blog
IT之家
IT之家
N
News and Events Feed by Topic
T
The Exploit Database - CXSecurity.com
S
Schneier on Security
月光博客
月光博客
H
Heimdal Security Blog
T
The Blog of Author Tim Ferriss
腾讯CDC
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Troy Hunt's Blog
小众软件
小众软件
Jina AI
Jina AI
博客园 - Franky
Scott Helme
Scott Helme
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
CERT Recently Published Vulnerability Notes
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
阮一峰的网络日志
阮一峰的网络日志
N
News and Events Feed by Topic
Apple Machine Learning Research
Apple Machine Learning Research
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
TaoSecurity Blog
TaoSecurity Blog
F
Fortinet All Blogs
Y
Y Combinator Blog
P
Privacy & Cybersecurity Law Blog
B
Blog RSS Feed
Microsoft Security Blog
Microsoft Security Blog
量子位
H
Help Net Security
MongoDB | Blog
MongoDB | Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
The Last Watchdog
The Last Watchdog
博客园 - 三生石上(FineUI控件)
L
LINUX DO - 最新话题

博客园 - dalgleish

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 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