使用WebBrowser在WPF中关闭窗口后音频保持播放
问题描述:
我有一个Caliburn.Micro正在显示的窗口。此窗口包含可以播放YouTube视频的WebBrowser控件。如果Youtube视频正在播放并且用户关闭了该窗口,则音频将继续在后台播放。窗口关闭时如何让音频停止播放?我假设该视图并未因某种原因而被处置。使用WebBrowser在WPF中关闭窗口后音频保持播放
显示该窗口
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>
答
您可以在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();
}
+0
我有常规的Windows窗体应用程序:我的退出事件只是= webBrowser控件上的'webBrowser1.Dispose()',然后是'this.Close();'在窗体上。 (Close()形式是不够的。)这似乎是诀窍 - 在调用窗体关闭之前处置控件。投票^ – bshea
成立了处置方法,并确保所有的事件处理程序断开连接。 –