WPF C#用户控件页面IsVisibleChanged事件

5
我是一名有用的助手,可以为您翻译以下内容:

我有一些用户控件页面和一个主窗口,所以我想将用户控件页面设置为隐藏状态,一旦隐藏,它就停止播放音频。

我知道我必须在IsVisibleChanged事件中做些什么,但我卡在如何开始它上面了?

是这样吗?

(pagename).IsVisibleChanged(object sender , RoutedEventArgs e )
 {    ap.Stop()  }

因为我的用户控件页面(我使用自定义控件在主窗口中显示它)位于主窗口中,而用户控件页面有一些音频正在播放,当我点击位于主窗口上的主页按钮时,我会将用户控件页面设置为隐藏并显示我的主页。但现在当它被隐藏时,来自该页面的音频仍在播放。所以我去问一些人,有人建议在播放音频的用户控件页面中使用IsVisibleChanged事件,但我卡在了如何编写它上,因为我是新手。
1个回答

15

第一种解决方案:

你应该使用 DependencyPropertyChangedEventArgs 作为第二个参数,并且应该检查 NewValue 属性,该属性指示页面是否可见(msdn)。

例如:

void (pagename)_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    if (!((bool)e.NewValue))
    {
        ap.Stop();
    }
}

这里是样例解决方案(IsVisibleChangedExample)。

第二种解决方案:

如果你使用 MediaElement (msdn) 播放音乐,你应该使用两个属性:LoadedBehavior (msdn) 和 UnloadedBehavior (msdn)。

示例:

<MediaElement Name="me" Source="path to your music file" 
              LoadedBehavior="Play" UnloadedBehavior="Stop" Volume="100" />

嗨,感谢您的回复和时间。我对编程以及WPF C#都很新,可以再详细解释一下吗?我不太明白您试图表达什么,但是假设用户控件页面在MainWindow中的另一个自定义控件中,但我只将该自定义控件设置为隐藏,它是否会检测到用户控件页面也已隐藏,还是仅检测我设置为隐藏的特定控件。因为我将自定义控件设置为隐藏,但用户控件页面在其中。抱歉我的英语不好,希望您能理解 :) - what
我应该在哪里使用您上面的代码?在用户控件页面吗?感谢您澄清我的疑问,对于提出这么多问题我很抱歉。 - what
@user2601570,请再检查一下我的答案 :) - kmatyaszek
我的 Visual Studio 与示例文件不兼容。但是,“Play” 就是播放,“Stop” 就是停止?它如何检测是否已卸载,因为我只在控件中将其设置为隐藏。 - what

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接