2016-02-26 33 views
0

我有一个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> 
+0

成立了处置方法,并确保所有的事件处理程序断开连接。 –

回答

0

您可以在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