C# WPF 无法加载音频

问题描述 投票:0回答:1

我正在用 C# WPF 开发一个应用程序,我想加载图像来显示。但代码无法将图像放入框架。当我运行我的应用程序时,将没有音频。我不添加LoadedBehavior和UnloadedBehavior并删除按钮单击功能中的所有代码将运行良好。但我想通过点击按钮来控制音乐的播放和停止。我想动态控制音乐。我想知道我遇到了什么问题。

这是我的主要 C# 代码,第二个是 XAML 代码。

using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace test_WPF;

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    private MediaElement music;
    public MainWindow()
    {
        InitializeComponent();
        
        music = (MediaElement) FindName("MyMusic");
        music.LoadedBehavior = MediaState.Manual;
        music.UnloadedBehavior = MediaState.Stop;
    }

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {
        if (music == null)
        {
            return;
        }

        try
        {
            if (music.HasAudio)
            {
                if (music.CanPause)
                {
                    music.Pause();
                }
                else
                {
                    music.Play();
                }
            }
            else if (music.HasVideo)
            {
                MessageBox.Show("It's Video");
            }
            else
            {
                MessageBox.Show("No Audio");
            }
        }
        catch (Exception exception)
        {
            Console.WriteLine(exception.ToString());
        }
    }
}
<Window x:Class="test_WPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        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"
        xmlns:local="clr-namespace:test_WPF"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <MediaElement
            Source="res/BGM.flac"
            Name="MyMusic"></MediaElement>
        <Button
            Width="40"
            Height="20"
            HorizontalAlignment="Center"
            VerticalAlignment="Bottom"
            Click="ButtonBase_OnClick"
            Margin="0 100">Click</Button>
    </Grid>
</Window>

我使用.Net 8.0.112。

c# wpf
1个回答
0
投票

媒体加载后,MediaElement.CanPause 会告知 MediaElement 是否支持暂停,在调用 MediaElement.Play() 或 MediaElement.Pause() 方法时它不会更改。

为了让您的代码正常工作,您可以引入一个代表音乐媒体元素状态的布尔字段:

private MediaElement music;
private bool isMusicPlaying = false;

然后用它来确定是播放还是暂停并相应地设置状态:

if (isMusicPlaying)
{
    music.Pause();
    isMusicPlaying = false;
}
else
{
    music.Play();
    isMusicPlaying = true;
}

System.Windows.Controls MediaElement 不会公开任何告诉其当前状态的公共属性,但您可以使用反射来获取它,如本答案所示:

如何确定 MediaElement 是否正在播放?

© www.soinside.com 2019 - 2024. All rights reserved.