using System.Reflection; namespace System.Windows.Forms { public class WebBrowser : Control { private System.Windows.Controls.ContentControl contentControl { get; } protected new System.Windows.Controls.WebBrowser control { get; } public Uri Url { get => control.Source; set => control.Source = value; } public string DocumentText { get { dynamic doc = control.Document; return doc.documentElement.innerHtml.ToString(); } } public bool ScriptErrorsSuppressed { get; set; } public event WebBrowserNavigatedEventHandler Navigated; protected virtual void OnNavigated(WebBrowserNavigatedEventArgs e) { dynamic activeX = control.GetType().InvokeMember("ActiveXInstance", BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic, null, control, new object[] { }); activeX.Silent = ScriptErrorsSuppressed; Navigated?.Invoke(this, e); } public void Navigate(string url) => control.Navigate(url); public WebBrowser() { contentControl = new(); control = new(); contentControl.Content = control; SetControl(contentControl); control.Navigated += (sender, e) => OnNavigated(new WebBrowserNavigatedEventArgs(e.Uri)); } } }