5

WPFアプリケーションでWebBrowser-Controlを次のように使用します

    <WebBrowser x:Name="webBrowser" Margin="0,28,0,0" />

ここで、リンクを含むmhtページに移動し、ユーザーがこのリンクの1つをクリックすると、新しいページがWebBrowser-Controlで開きます。ただし、新しいDefault-Browser-Windowで開く必要があります。WebBrowser-Controlのコンテンツは変更しないでください。この動作を変更する方法はありますか?

4

3 に答える 3

15

NavigatingイベントでProces.Start()を使用してデフォルトのブラウザで新しいページを開きe.Cancel = true;、コントロールのページが変更されないように設定できます。

例:

@ MainWindow.xaml.cs

using System.Diagnostics;
using System.Windows;
using System.Windows.Navigation;

namespace OpenDefaultBrowser
{
    public partial class MainWindow : Window
    {
        private static bool willNavigate;

        public MainWindow()
        {
            InitializeComponent();
        }

        private void webBrowser1_Navigating(object sender, NavigatingCancelEventArgs e)
        {
            // first page needs to be loaded in webBrowser control
            if (!willNavigate)
            {
                willNavigate = true;
                return;
            }

            // cancel navigation to the clicked link in the webBrowser control
            e.Cancel = true;

            var startInfo = new ProcessStartInfo
            {
                FileName = e.Uri.ToString()
            };

            Process.Start(startInfo);
        }
    }
}

@ MainWindow.xaml

<Window x:Class="OpenDefaultBrowser.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="464" Width="1046">
    <Grid>
        <WebBrowser Height="425" HorizontalAlignment="Left" Name="webBrowser1" VerticalAlignment="Top" Width="1024" Source="http://stackoverflow.com/" Navigating="webBrowser1_Navigating" />
    </Grid>
</Window>
于 2012-06-07T12:01:08.650 に答える
0

WebBrowserハイパーリンクがクリックされ、単純なURL(javascriptベースのハイパーリンクではない)を再プリセットしている場合、通常のブラウザーでもこのように意図されているとは思いません。そのブラウザーウィンドウ(およびその特定のタブ)自体でURLが開きます。。WebBrowserコントロールは、ブラウザ自体のこの基本的な動作を模倣します。

ハイパーリンクを右クリックして「新しいウィンドウで開く」と言うことができると思います(そのオプションがWebBrowserコントロールで有効になっているかどうかを確認してください)。

そのオプションが無効になっている場合は、特別なHTMLHostAPIを使用して有効にできます。

于 2012-06-07T08:30:19.533 に答える
-1

Webブラウザー制御は、デフォルトでは、リンクがクリックされている間はデフォルトのブラウザーを開かず、InternetExplorerでのみブラウザー内でクリックされたリンクを開きます。これで_DocumentCompletedイベントを使用できますが、機能するには、リンクボタンなどのイベントベースのトリガーが必要です。ここで問題となるのは、ブラウザコントロールのhtmlにhrefがある場合、これも機能しないということです。これに対する解決策は、_NewWindowイベントを使用することです。コードを以下に示します

/* The event handler*/
private void webBrowser1_NewWindow(object sender, CancelEventArgs e)
        {
            var webbrowser = (WebBrowser)sender;
            e.Cancel = true;
            OpenWebsite(webbrowser.StatusText.ToString());
            webbrowser = null;
        }

/* The function call*/
public static void OpenWebsite(string url)
        {
            Process.Start(GetDefaultBrowserPath(), url);
        }

 private static string GetDefaultBrowserPath()
        {
            string key = @"http\shell\open\command";
            RegistryKey registryKey =
            Registry.ClassesRoot.OpenSubKey(key, false);
            return ((string)registryKey.GetValue(null, null)).Split('"')[1];
        }

改善のための提案を募集しています。ハッピーコーディング。

于 2012-08-22T08:16:29.023 に答える