91 votes

DataBind, la propriété Source du WebBrowser dans WPF

Quelqu'un sait-il comment databind le. Propriété source du WebBrowser dans WPF (3.5SP1) ? J’ai une listview qui je veux avoir un WebBrowser petit sur la gauche et le contenu sur la droite et à databind la source de chaque WebBrowser doté de l’URI dans chaque objet lié à l’élément de liste.

C’est ce que j’ai comme une preuve de concept jusqu’ici, mais le " `` " ne compile pas.

164voto

Todd White Points 4257

Le problème est que la WebBrowser.Source n’est pas un DependencyProperty. Une solution serait d’utiliser une magie AttachedProperty pour permettre à cette capacité.

Puis dans votre xaml, faites :

33voto

Roel Points 3768

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

33voto

Samuel Jack Points 14556

J’ai modifié les excellente réponse de Todd un peu pour produire une version qui s’adapte à l’URI de la source de liaison ou des chaînes :

3voto

Olaf Japp Points 79

Bonne idée Todd.

J’ai maintenant fait semblable avec le RichTextBox.Selection.Text dans Silverlight 4. Merci pour votre post. Fonctionne très bien.

Voici le Code Xaml.

1voto

Max Galkin Points 10116

Vous pouvez également utiliser un spécial contrôle proxy distincts. Il n’est pas applicable uniquement dans le cas de WebBrowser, mais à un tel contrôle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X