2010-12-03 5 views
4
<WebBrowser x:Name="messageBufferWebBrowser" 
    controls:WebBrowserUtility.Body="{Binding MessageBuilder}"/> 

J'utilise cette classe pour permettre la liaison au corps du contrôle WebBrowserComment faire pour faire défiler un contrôle WPF WebBrowser à la fin?

public static class WebBrowserUtility 
{ 


    public static readonly DependencyProperty BodyProperty = 
    DependencyProperty.RegisterAttached("Body", typeof(string), typeof(WebBrowserUtility), new PropertyMetadata(OnBodyChanged)); 

    public static string GetBody(DependencyObject dependencyObject) 
    { 
     return (string)dependencyObject.GetValue(BodyProperty); 
    } 

    public static void SetBody(DependencyObject dependencyObject, string body) 
    { 
     dependencyObject.SetValue(BodyProperty, body); 
    } 

    private static void OnBodyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     var webBrowser = d as WebBrowser; 
     if (!string.IsNullOrWhiteSpace(e.NewValue as string) && webBrowser != null) 
     { 
      if (Application.Current.MainWindow != null && !DesignerProperties.GetIsInDesignMode(Application.Current.MainWindow)) 
      { 
       webBrowser.NavigateToString((string)e.NewValue); 
      } 
     } 
    } 

} 

C'est mon WebBrowser, je suis liant à une propriété StringBuilder sur le ViewModel. Comment puis-je obtenir le contrôle WebBrowser pour faire défiler jusqu'à la fin?

Répondre

6

Si vous lancez la propriété WebBrowser de document à un mshtml.HTMLDocument, vous pouvez faire défiler jusqu'à une position spécifique dans la page (ou le bas en utilisant la plus grande valeur possible):

var html = webBrowser.Document as mshtml.HTMLDocument; 
html.parentWindow.scroll(0, 10000000); 

Notez que vous avez pour ajouter une référence à Microsoft.mshtml dans votre projet.

+1

int.MaxValue ne fonctionne pas pour moi, mais la constante magique 10000000 fonctionne – Kluyg

+0

"Notez que cette méthode ne fonctionne que si vous gérez le défilement à l'intérieur de l'événement WebBrowser.LoadCompleted." - @ DavyMac23 –

+0

merci, vous avez sauvé mon temps –

Questions connexes