C#
WPF
IE11

[WPF][C#] WebBrowserコントロールの表示モードをIE11に変更する

WPFのWebBrowserコントロールをちょっと試してみたんですが、どうもレジストリを書き換えないと初期状態はIE7のモードで描画がされるとのこと(どんな仕様なんだ・・・)。そのためデフォルトではHTML5やJavaScriptやらなんやら最近のWebはまともに表示できません。

そのためC#上でレジストリを書き換えてWebBrowserの表示モードを切り替えてみました。

検証環境

  • Windows 10 Home 64bit
  • .NET Framework 4.5

実装例

※レジストリの書き換えが行われるため実行は注意の上自己責任でお願いします。

XAML実装例
<Window x:Class="Hoge.TestWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Hoge.TestWindow"
        mc:Ignorable="d"
        Title="TestWindow" Height="300" Width="300">
    <Grid>
        <WebBrowser Source="..."></WebBrowser>
    </Grid>
</Window>
WebBrowserコントロール向けのレジストリの書き換え(上記Windowの表示前に実行)
        public static void createRegistry()
        {
            var filename = Process.GetCurrentProcess().MainModule.FileName;
            filename = filename.Substring(filename.LastIndexOf('\\') + 1,
                filename.Length - filename.LastIndexOf('\\') - 1);
            if (filename.Contains("vhost"))
                filename = filename.Substring(0, filename.IndexOf('.') + 1) + "exe";

            Debug.Assert(Registry.CurrentUser != null, "Registry.CurrentUser != null");

            RegistryKey key1 = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION");
            RegistryKey key2 = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BEHAVIORS");
            key1?.SetValue(filename, 11001, RegistryValueKind.DWord);
            key2?.SetValue(filename, 11001, RegistryValueKind.DWord);
            key1?.Close();
            key2?.Close();
        }

これで自分の環境ではIE11のモードで実行ができるようになりました。
コードは以下の記事のものを参考にしていますが、そのままだと権限関連で実行できないので Registry.CurrentUser に一部変更しています。
WebBrowser c# object : set google chrome as default browser - Stack Overflow

参考

WebBrowser c# object : set google chrome as default browser - Stack Overflow
WebBrowser コントロールのInternet Explorerを最新のバージョンに変更する - C#プログラミング