在 WPF 中使用 WebBrowser 关闭窗口后音频继续播放
Posted
技术标签:
【中文标题】在 WPF 中使用 WebBrowser 关闭窗口后音频继续播放【英文标题】:Audio Keeps Playing After Closing Window With WebBrowser In WPF 【发布时间】:2016-06-10 06:50:44 【问题描述】:我有一个由 Caliburn.Micro 显示的窗口。此窗口包含一个可以播放 youtube 视频的 WebBrowser 控件。如果 Youtube 视频正在播放并且用户关闭窗口,则音频继续在后台播放。窗口关闭时如何让音频停止播放?我假设由于某种原因没有处理视图。
显示窗口
public void Handle(VideoButtonClick message)
var manager = new WindowManager();
Video = new VideoViewModel(message.VideoID);
dynamic settings = new ExpandoObject();
settings.ResizeMode = ResizeMode.NoResize;
settings.Icon = null;
manager.ShowDialog(Video, null, settings);
在窗口中显示的视图
<UserControl .....>
<Grid>
<WebBrowser ctrl:BrowserBehavior.html="Binding VideoHTML"
ScrollViewer.CanContentScroll="False"
ScrollViewer.VerticalScrollBarVisibility="Hidden" />
</Grid>
</UserControl>
【问题讨论】:
设置 dispose 方法并确保所有事件处理程序都断开连接。 【参考方案1】:您可以在您的VideoViewModel
中实现IDeactivate
:
public class VideoViewModel : PropertyChangedBase, IDeactivate
private bool _isClosing;
public bool IsClosing
get return _isClosing;
set
_isClosing = value;
NotifyOfPropertyChange(() => IsClosing);
public void Deactivate(bool close)
IsClosing = close;
public event EventHandler<DeactivationEventArgs> AttemptingDeactivation;
public event EventHandler<DeactivationEventArgs> Deactivated;
在Deactivate
方法中设置一个名为IsClosing
的属性。
在你看来:
<UserControl .....
x:Name="ThisUserControl">
<i:Interaction.Triggers>
<ei:DataTrigger Binding="Binding IsClosing" Value="True">
<ei:CallMethodAction MethodName="DisposeBrowser" TargetObject="Binding ElementName=ThisUserControl"/>
</ei:DataTrigger>
</i:Interaction.Triggers>
<Grid>
<WebBrowser x:Name="MyWebBrowser"
ctrl:BrowserBehavior.Html="Binding VideoHTML"
ScrollViewer.CanContentScroll="False"
ScrollViewer.VerticalScrollBarVisibility="Hidden" />
</Grid>
</UserControl>
在UserControl
的代码隐藏中:
public void DisposeBrowser()
MyWebBrowser.Dispose();
【讨论】:
我有常规的 Windows 窗体应用程序:我的退出事件只是 =webBrowser1.Dispose()
在我的 webBrowser 控件上,然后是 this.Close();
在窗体上。 (Close() 表单是不够的。)这似乎可以解决问题 - 在调用表单关闭之前处理控件。投票^以上是关于在 WPF 中使用 WebBrowser 关闭窗口后音频继续播放的主要内容,如果未能解决你的问题,请参考以下文章
WPF:如何在弹出窗口中自动调整 WebBrowser 的大小?
wpf中我想在WebBrowser控件上放置一个Border控件
如何在 webbrowser WPF 顶部打开用户控件作为弹出窗口
StackPanel中的WebBrowser不会在WPF中扩展到其内容大小