WPF webBrowser:渲染完成后如何显示图像

时间:2011-09-26 17:00:21

标签: c# wpf webbrowser-control

我的UI上有一个webBrowser。我问它是否可能不是直接显示而是通过图像显示,我希望只有在收到LoadCompleted事件时才更新图像。 怎么办?

2 个答案:

答案 0 :(得分:1)

我不确定我是否理解了您的问题,但如果我这样做了,您基本上只想在其渲染完成时显示已加载的网页。

如果是这样,这段代码应该可以解决问题(我假设您将“LoadCompleted”事件挂钩到“webBrowser1_LoadCompleted”方法)。此代码使用Button(“button1”)来触发导航,但您可以在任何其他地方使用它。

//here is the code that triggers the navigation: when the button is clicked, I hide the
//webBrowser and then navigate to the page (here I used Google as an example)
    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
        webBrowser1.Visibility = Visibility.Hidden;
        webBrowser1.Navigate(new Uri("http://www.google.it")); 
    } 

    private void webBrowser1_LoadCompleted(object sender, NavigationEventArgs e) 
    { 
        webBrowser1.Visibility = Visibility.Visible; 
    } 

但请记住,长时间不向用户显示任何内容(与重页一样)并不总是一个好主意,具体取决于您正在编写的应用程序类型。不过,这取决于你。

答案 1 :(得分:0)

(如果有人需要,我决定留下以前的答案)

如果您希望在新页面出现之前保持上一页可见,那么我认为您需要一个Windows DLL。我就是这样做的。

在代码文件的顶部,插入以下两个import语句:

using System.Runtime.InteropServices;
using System.Windows.Interop;

然后你需要声明你的DLL函数(在Window类中):

 [DllImport("user32")]
 private static extern int LockWindowUpdate (IntPtr hWnd);

然后,让我们稍微修改上一个答案中的代码:

 private void button1_Click(object sender, RoutedEventArgs e) 
 {
     IntPtr handle = new WindowInteropHelper(Application.Current.MainWindow).Handle;
     LockWindowUpdate(handle);
     webBrowser1.Navigate(new Uri("http://www.google.it")); 
 } 

 private void webBrowser1_DocumentCompleted(object sender, NavigationEventArgs e) 
 {
     LockWindowUpdate(new IntPtr(0));
 }

这应该将最后加载的页面保留在屏幕上,直到新页面完成渲染为止;你可以想象,DLL函数只是通过传递它的句柄来锁定Window的更新。手柄0将其解锁。