Я написал обертку usercontrol, которая использует свойства 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);
}
}
и используйте его так:
<Controls:HtmlBox HtmlText="{Binding MyHtml}" />
Единственная проблема, связанная с этим, заключается в том, что элемент управления WebBrowser не является "чистым" wpf ... на самом деле это просто оболочка для компонента win32. Это означает, что элемент управления не будет учитывать z-index и всегда будет перекрывать другой элемент (например, в scrollviewer это может вызвать некоторые проблемы)
больше информации об этих проблемах win32-wpf на MSDN