LoginSignup
5
6

More than 3 years have passed since last update.

Windows GUIプログラミング入門21 NuGet(3), ブラウザコントロール

Last updated at Posted at 2019-06-16

■はじめに

今回はNuGetで、(Google Chromeでも使用されている)ChromiumのWebブラウザーコントロールをインストールして使います。

[注意]
これまでの回で説明済みの操作方法等は、説明を省略したり簡略化している場合があります。

■開発環境

  • Windows 10
  • Visual Studio Community 2019
  • .NET Framework 4.x

■作ってみる

◇プロジェクトの作成

WPFプロジェクトを作成します。
ここではSimpleBrowserと名付けました。

bg21-01.png

◇ビルド構成の設定

「x86」でビルドするための設定をします。

※「AnyCPU」でビルドしたい場合はこちらを参考に設定してください。
Feature Request - Add AnyCPU Support · Issue #1714 · cefsharp/CefSharp · GitHub

「ソリューション プラットフォーム」のコンボボックスを開き、「構成マネージャー」を選択します。

bg21-02.png

「アクティブ ソリューション プラットフォーム」のコンボボックスを開き、「新規作成」を選択します。

bg21-03.png

プラットフォームのコンボボックスから「x86」を選択して「OK」ボタンを押下します。

bg21-04.png

bg21-05.png

「x86」が選択されていることを確認します。

bg21-06.png

◇Webブラウザーコントロールのインストール

NuGetでCefSharp.Wpfをインストールします。

bg21-07.png

インストール完了後、念のためVisual Studioをいったん終了し、再度ソリューションを開いてください。

◇画面作成

Gridを2行、3列に分割してください。
1行目の高さは小さめ、真ん中の列幅は大きめにしてください。
後で調整するので大体でよいです。

bg21-08.png

XamlのWindowの定義に

xmlns:cef="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"

の記述を追加し、Gridの中に

<cef:ChromiumWebBrowser x:Name="browser" Grid.RowSpan="2" Grid.ColumnSpan="3"/>

の記述を追加してください。
これで画面いっぱいにブラウザコントロールが配置されます。

bg21-09.png

ツールボックスからDockPanelをGridの1行目、真ん中の列にドラッグ&ドロップしてください。

bg21-10.png

DockPanelの定義を以下のように編集します。

<DockPanel x:Name="naviPanel" Grid.Column="1" Opacity="0.8"/>

Gridの1行目、真ん中の列(DockPanel)の中にStackPanel, TextBox, Buttonをドラッグ&ドロップしてください。
訂正:左からStackPanelButtonTextBoxの順に配置してください。

bg21-11.png

StackPanelの中にButtonを2つドラッグ&ドロップしてください。

bg21-12.png

各種プロパティを編集します。

<!-- Webブラウザーコントロール -->
<cef:ChromiumWebBrowser x:Name="browser" Grid.RowSpan="2" Grid.ColumnSpan="3"/>

<!-- 上段中央パネル -->
<DockPanel x:Name="naviPanel" Grid.Column="1" Opacity="0.8">
    <StackPanel Orientation="Horizontal" DockPanel.Dock="Left">
        <!-- 戻るボタン -->
        <Button x:Name="back" Content="◀" Margin="5" Padding="5,0"/>
        <!-- 進むボタン -->
        <Button x:Name="forward" Content="▶" Margin="0,5,5,5" Padding="5,0"/>
    </StackPanel>
    <!-- ページ表示ボタン -->
    <Button x:Name="go" Content="Go" DockPanel.Dock="Right" Margin="5" Padding="10,0" IsDefault="True"/>
    <!-- アドレスバー -->
    <TextBox x:Name="address" Margin="0,5"/>
</DockPanel>

戻る・進むボタンのあるStackPanelのDockPanel.DockプロパティをLeftで左端に、
GoボタンのDoclPanel.DockプロパティをRightで右端に配置することによって、
空いた領域をTextBoxが埋めるように配置されます。
DockPanelはコントロールを配置する順番が重要です。

初期フォーカスをアドレスバーに設定します。
GridにFocusManager.FocusElementを設定してください。
ついでにWindowのタイトルも設定しています。

<Window x:Class="Browser01.MainWindow"
    :
    xmlns:cef="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
    Title="簡易ブラウザ" Height="450" Width="800" ResizeMode="CanResizeWithGrip">
<Grid FocusManager.FocusedElement="{Binding ElementName=address}">
    <Grid.RowDefinitions>
:

Gridの行列の調整をします。
1行目の高さをAutoに設定します。

bg21-13.png

真ん中の列の幅を変更します。
数字部分をクリックし、3を入力します。

bg21-14.png

bg21-15.png

左右の列幅は1に設定します。
画面デザイナでの操作がやりづらければ直接Xamlを編集してもよいです。

ここまでで画面レイアウトは以下のようになります。

bg21-16.png

◇ロジック作成

Goボタンを選択し、プロパティウィンドウの稲妻マークを選択し、Clickのテキストボックスをダブルクリックします。

bg21-17.png

Clickイベントに以下を記述します。

if (string.IsNullOrWhiteSpace(address.Text))
{
    return;
}

if (browser.IsLoaded)
{
    browser.Load(address.Text);
}
else
{
    browser.Address = address.Text;
}

ブラウザ初期化処理を作成し、コンストラクタで呼ぶようにします。

public MainWindow()
{
    InitializeComponent();

    // ブラウザ初期化
    InitBrowser();
}

/// <summary>
/// ブラウザ初期化
/// </summary>
private void InitBrowser()
{
    // 戻る・進むボタンの設定
    naviPanel.DataContext = browser;
    back.Command = browser.BackCommand;
    forward.Command = browser.ForwardCommand;

    // 言語設定
    browser.BrowserSettings.AcceptLanguageList = "ja-JP";
}

これで完成です。

■動かしてみる

実行してみます。

bg21-18.png

アドレスバーにURLを入力してEnterキーを押すか、Goボタンを押します。
bg21-19.png

Webページの上に重なるようにしてアドレスバー等のコントロールが表示されています。
bg-21-21.png
コントロールを重ねて表示する場合、画面で手前に表示したいものをXamlで後(下)の方に定義するようにします。
今回の例で言うと、ブラウザコントロールの後にDockPanelを定義しています。

リンクをクリックして別のページに移動してみます。
戻るボタンが有効化しました。
bg21-20.png

おしまい


<< 最初の記事   < 前の記事   次の記事 >

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6