WPF。如何从Page.xaml.cs和Page.xaml访问位于MainWindow.xaml中的MediaElement?

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

我的应用程序中有一个 mainwindow.xaml 和几个页面。我将 MediaElement 放在主窗口上,以便在页面之间切换时歌曲不会中断,我还希望能够在每个页面上切换歌曲并更改音量。但我不知道如何从 MainWindow.xaml 访问 MediaElement。

在 MainWindow.xaml 中,我创建了一个包含音乐的 MediaElement

<MediaElement x:Name="music" Source="Models\Music\music_one.m4a">
该项目还有页面,我想在该页面上按下按钮即可通过处理程序切换到另一首歌曲:

 private void TurnOn_Christmas_Button(object sender, RoutedEventArgs e)
        {
 
            music.Close();
            music.Source = new Uri("music/mus/music_two.m4a", UriKind.Relative);
            music.Play();
        }

但是它根本看不到 MainWindow.xaml 中的“音乐”。如何访问它? 我还需要在 Page.xaml 中访问它,因为我想添加通过 Slider 更改音量的可能性

<Slider x:Name="VolumeMusic" Grid.Row="8" Grid.Column="1" Grid.ColumnSpan="4" Minimum="0" Maximum="1" Visibility="Hidden"
        Value="{Binding ElementName=music, Path=Volume, Mode=TwoWay}" VerticalAlignment="Center"/>

因此,在这里他也看不到它。怎么联系?

c wpf mediaelement
1个回答
0
投票

要从其他页面或控件访问 MainWindow.xaml 中定义的 MediaElement,您可以使用各种方法。一种常见的方法是在 MainWindow.xaml.cs 文件中创建公开 MediaElement 的公共属性或方法。这是一个例子:

public partial class MainWindow : Window
{
 Create a public property to expose the MediaElement
public MediaElement MusicElement
{
    get { return music; }
}

// ... other code in MainWindow.xaml.cs
}

现在,在 Page.xaml.cs 或任何其他要访问 MediaElement 的代码隐藏文件中,您可以执行以下操作:

private void TurnOn_Christmas_Button(object sender, RoutedEventArgs e)
{
 // Access the MediaElement from MainWindow
 if (Application.Current.MainWindow is MainWindow mainWindow)
 {
    // Use the public property to get the MediaElement
    MediaElement music = mainWindow.MusicElement;

    // Now you can manipulate the MediaElement
    music.Close();
    music.Source = new Uri("music/mus/music_two.m4a", UriKind.Relative);
    music.Play();
}
}

同样,要更改 Page.xaml.cs 中的音量:

  private void VolumeSlider_ValueChanged(object sender, 
  RoutedPropertyChangedEventArgs<double> e)
  {
  // Access the MediaElement from MainWindow
  if (Application.Current.MainWindow is MainWindow mainWindow)
  {
    // Use the public property to get the MediaElement
    MediaElement music = mainWindow.MusicElement;

    // Set the volume based on the Slider value
    music.Volume = VolumeSlider.Value;
 }
} 

确保根据您的项目结构和命名约定调整代码。这种方法允许您从应用程序的其他部分访问 MediaElement。

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