C# 如何禁用在后台运行的控件

C# 如何禁用在后台运行的控件,c#,wpf,button,panel,mainwindow,C#,Wpf,Button,Panel,Mainwindow,我在主窗口中有一个页面转换控件(有几个按钮和一个主页按钮可通向主页),因此我单击主窗口上的一个按钮,可在主窗口中的页面转换中显示一个用户控件页面,在该用户控件页面中可播放音频,好的,但是当我点击主页按钮显示主页时,来自用户控制页面的音频仍在播放。如何停止用户控件页在后台运行 以下是我如何将用户控件页面调用到主窗口中的页面转换控件中: private void button2_Click(object sender, RoutedEventArgs e) // Story {

我在主窗口中有一个页面转换控件(有几个按钮和一个主页按钮可通向主页),因此我单击主窗口上的一个按钮,可在主窗口中的页面转换中显示一个用户控件页面,在该用户控件页面中可播放音频,好的,但是当我点击主页按钮显示主页时,来自用户控制页面的音频仍在播放。如何停止用户控件页在后台运行

以下是我如何将用户控件页面调用到主窗口中的页面转换控件中:

    private void button2_Click(object sender, RoutedEventArgs e) // Story
    {
        Story page = new Story();
        pageTransition1.IsEnabled = true;
        pageTransition1.Visibility = System.Windows.Visibility.Visible;
        grid1.Visibility = System.Windows.Visibility.Hidden;
        pageTransition1.ShowPage(page);
    }


    private void button5_Click(object sender, RoutedEventArgs e) // Home Button
    {
        pageTransition1.Visibility = System.Windows.Visibility.Hidden;
        pageTransition1.IsEnabled = false;
        grid1.Visibility = System.Windows.Visibility.Visible;
    }
基本上,当我点击home按钮时,我只希望用户控制页面停止运行(因为它在后台运行)

如何在“用户控制”页面中播放声音:

            mediaElement1.LoadedBehavior = MediaState.Manual;
        mediaElement1.Source = new Uri(audioNames[iCurrentImageCount], UriKind.RelativeOrAbsolute);
        mediaElement1.Play();


一种解决方案是在用户控制页中处理卸载的事件并停止播放媒体。

您可以使用.Net 4.5吗?如果是,我将提供一个包含Async/Await的列表,这在4.0中无法实现?你是什么意思?为什么不能在.Net 4.0中完成?我使用的是.Net 4.0,因此解决方案只能在4.5中完成?能否提供更多关于如何在用户页面中播放声音的代码?private void Grid_Unloaded(object sender,RoutedEventArgs e){ap.Stop();ap.Close();}此代码仅在加载和卸载页面时有效。如果您只是在更改可见性,请使用IsVisibleChanged事件。因此,这类似于如果UserControlPage\u IsVisibleChanged(对象发送方,RoutedEventArgs e)?
     MediaPlayer ap = new MediaPlayer();
        recordedaudio = System.IO.Directory.GetFiles(@"../../Audio/", "*.wav");
        if (recordedaudio == null)
        { MessageBox.Show("No Recorded Files!"); }
        else
        {
            ap.Open(new Uri(recordedaudio[iCurrentImageCount], UriKind.RelativeOrAbsolute));
            ap.Play();
        }