我的UI上有一个webBrowser。我问它是否可能不是直接显示而是通过图像显示,我希望只有在收到LoadCompleted事件时才更新图像。 怎么办?
答案 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将其解锁。