J'ai écrit un wrapper usercontrol, ce qui rend l'utilisation de la DependencyProperties:
XAML:
<UserControl x:Class="HtmlBox">
<WebBrowser x:Name="browser" />
</UserControl>
C#:
public static readonly DependencyProperty HtmlTextProperty = DependencyProperty.Register("HtmlText", typeof(string), typeof(HtmlBox));
public string HtmlText {
get { return (string)GetValue(HtmlTextProperty); }
set { SetValue(HtmlTextProperty, value); }
}
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e) {
base.OnPropertyChanged(e);
if (e.Property == HtmlTextProperty) {
DoBrowse();
}
}
private void DoBrowse() {
if (!string.IsNullOrEmpty(HtmlText)) {
browser.NavigateToString(HtmlText);
}
}
et de l'utiliser comme ceci:
<Controls:HtmlBox HtmlText="{Binding MyHtml}" />
Le seul problème avec cela est que le contrôle WebBrowser est pas "pur" wpf... c'est juste un wrapper pour un win32 composant. Cela signifie que le contrôle n'est pas respecter les z-index, et sera toujours de la superposition d'un autre élément (par exemple: dans un scrollviewer cela peut causer des problèmes)
plus d'infos sur ces win32-wpf questions sur MSDN