У меня есть WebBrowser, встроенный в tabcontrol в моем приложении WPF следующим образом.
<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;
}
Однако в представлении табуляции всегда отображается первый отображаемый экран веб-браузера.Я должен щелкнуть правой кнопкой мыши и сказать обновить на вкладке, чтобы увидеть обновленное содержимое веб-браузера.При ближайшем рассмотрении проблема отслеживается в веб-браузере, который не загружается, даже если указан другой источник (или вызывается navigate (), refresh () ....).В предыдущем коде логическая переменная isloa имеет значение false.
Может кто-нибудь пролить свет на проблему.Я вижу, что кто-то использовал thread.sleep () в качестве последнего метода в window_loaded, чтобы решить аналогичную проблему.Есть ли лучший подход?