1

Web ブラウザー コントロール内でイベントを処理できますか? 私の場合、ラジオ ボタン リストを Web ブラウザ コントロールに渡し、ラジオ ボタンの変更イベントをコード ビハインドで処理したいので、
Google で検索しようとしましたが、具体的な例が見つかりませんでした。

 WebBrowser.NavigateToString("<html>
<body>
<input type='radio' name='g1' value='V1'> V1<br>
<input type='radio' name='g1' value='V2' V2<br>
</body>
</html>");

コードビハインドでこれらのラジオボタンの変更の変更イベントを取得するにはどうすればよいですか、javascriptを使用できますが、それは私の目的を満たしていません

誰でもこれを行う方法を提案できますか。

4

1 に答える 1

4

Javascript から C# メソッドを呼び出す

HTML ドキュメントと WPF 間の通信には、アプリケーション間の完全な信頼が必要です。javascript では、window.external は、WebBrowser の外部でメソッドを呼び出すために使用できる外部アプリケーションを指します。

これを行うには、2 つの間のインターフェイスを作成する必要があります。Javascript を使用して直接アクセスできるヘルパー メソッドを使用する必要があります。WPF WebBrowser コントロールを使用してこれを実現する方法を見てみましょう。

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[ComVisible(true)]
public class ObjectForScriptingHelper
{
    Mainwindow mExternalWPF;
    public ObjectForScriptingHelper(Window1 w)
    {
        this.mExternalWPF = w;
    }

}

したがって、基本的にこのクラスを使用すると、JavaScript から直接 .NET メソッドを呼び出すことができます。このヘルパー クラスは、Permission を FullTrust に設定し、ComVisible にも設定します。したがって、実際には Com 要素である WebBrowser は、クラスと直接通信して、ブラウザが読み込まれる親ウィンドウであるクラス ObjectForScriptingHelper 内のメソッドを呼び出すことができます。javascript では、window.external を使用してこのクラスを指すことができます。

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[ComVisible(true)]
public class ObjectForScriptingHelper
{
    Mainwindow mExternalWPF;
    public ObjectForScriptingHelper(Window1w)
    {
        this.mExternalWPF = w;
    }
    public void InvokeMeFromJavascript(string jsscript)
        {
            this.mExternalWPF.tbMessageFromBrowser.Text = string.Format("Message :{0}", jsscript);
        }

}

クラス ObjectForScriptingHelper クラス内にメソッド InvokeMeFromJavascript があるとします。このクラスを使用するには、そのオブジェクトを作成し、それを WebBrowser コントロールの ObjectForScripting プロパティに渡す必要があります。

だから私は書く、

ObjectForScriptingHelper helper = new ObjectForScriptingHelper(this);
this.wbMain.ObjectForScripting = helper;

次に、次のように html に移動します。

<input type="text" id="txtMessage" />
<input type="button" value="InvokeMe" onclick="javascript:window.external.InvokeMeFromJavascript(document.getElementById('txtMessage').value);" />

これにより、テキストボックスとボタンが読み込まれます。上記のコードを見ると、window.external を使用して、ObjectForScriptHelper クラスで宣言したのと同じ関数を呼び出しています。したがって、WebBrowser 内の Button をクリックすると、その外側の TextBlock にメッセージが表示されます。

上の画像では、ユーザーが WebBrowser 内の InvokeMe をクリックすると、外部に配置された TextBlock が更新されます。

ソース: www.dotnetfunda.com/articles/article840-working-with-webbrowser-in-wpf.aspx

于 2012-09-06T06:12:56.177 に答える