我有一个WebBrowser嵌入在我的WPF应用程序中的tabcontrol,如下所示。如何确保WPF WebBrowser加载在tabcontrol
<Grid>
<TabControl SelectionChanged="tabwindow_SelectionChanged">
<TabItem Header="Preview" Name="PreviewWindow">
<WebBrowser x:Name="PreviewBrowser" Loaded="PreviewBrowser_OnLoad"/>
</TabItem>
<TabItem Header="XML">
<ew:CommonXmlEditor
x:Name="rawXmlEditor"
DataContext="{Binding ElementName=XMLDockMainWindow}"
ShowLineNumbers="True"
FontFamily="Consolas"
FontSize="10pt"
SyntaxHighlighting="XML"
ContextMenu="{StaticResource XmlEditorContextMenu}"/>
</TabItem>
<TabItem Header="Not Used">
The Mushrooms Tab
</TabItem>
</TabControl>
</Grid>
在tabwindow_SelectionChanged()事件我想如下
private void tabwindow_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string previewFile = "/session/PreviewXml.data";
XmlMethodCall.Instance.Put(previewFile, this.XmlEditor.Text, true);
//WebBrowser browser = new WebBrowser();
string urlForPreview = XmlMethodCall.Instance.ServerUri.ToString() + "/admin/framework/form_preview.php?path=" + previewFile;
App app = Application.Current as App;
string sessionState = XmlMethodCall.Instance.HttpResponse.Headers.Get("Cookie");
int index = sessionState.IndexOf(";");
if (index >= 0)
{
sessionState = sessionState.Substring(0, index);
}
sessionState = sessionState.Replace("ESPSessionState=", "");
InternetSetCookie(XmlMethodCall.Instance.ServerUri.ToString() + "/admin/", "EspSessionId", sessionState);
PreviewBrowser.Source = new Uri(urlForPreview);
PreviewBrowser.Navigate(urlForPreview);
bool isloa = PreviewBrowser.IsLoaded;
}
更新浏览器的内容,但是,TabView的总是显示网页浏览器的第一个渲染画面。我必须右键单击并在tabview上进行刷新以查看webbrowser的更新内容。在进一步检查时,问题会跟踪到webbrowser,即使指定了其他源(或调用navigate(),refresh()....),webbrowser也不会加载。在前面的代码中,布尔变量isloa是false。
有人可以投诉一些问题。我看到有人使用thread.sleep()作为window_loaded中的最后一个方法来解决类似的问题。有没有更好的方法?
@ Alex-非常好。非常感谢你。 – Jimmy 2011-02-08 12:35:34