我有一個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