SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Silverlight 4で作る新しいRIAアプリケーション

Silverlightによるデスクトップアプリケーション

Silverlight 4で作る新しいRIAアプリケーション(8)


ダウンロード sample.zip (2.1 MB)

HTMLコントロールとHTMLブラシ

 Silverlight 3までは、HTML形式のヘルプやクレジットカードの決済サイト、広告バナーなどを表示したい場合、新しいウインドウで表示したり、ページを遷移させる必要がありました。Silverlight 4ではブラウザ外実行時に限り、HTMLコントロールやHTMLブラシを使ってHTMLをSilverlight内部に表示できます。

WebBrowserコントロール

 WebBrowserコントロールは、HTMLのインラインフレームのように、Silverlightのページ内部にHTML用の表示エリアを確保するコントロールです。ブラウザ外実行時に限り、利用できます。通常のWebページにホストされたSilverlightに、WebBrowserコントロールを配置すると、図5のようなメッセージが画面に表示されます。

図5 通常のWebページで利用された場合に表示されるWebBrowserコントロール
caption

 例えば、HTMLで作成されたアプリケーションのヘルプや、外部のWebページをSilverlightのページ内に表示できます。WebBrowserコントロールは、表1のメソッドやプロパティを操作することで、HTMLを表示します。

表1 WebBrowserコントロールでHTMLを表示するためのメソッドとプロパティ
No メソッドまたはプロパティ 概要
1 NavigateToStringメソッド HTML文字列をWebブラウザコントロールに表示します。
2 Sourceプロパティ XAP内のHTMLや外部のWebページのURLが指すリソースを表示します。
3 Navigateメソッド XAP内のHTMLや外部のWebページのURLが指すリソースに移動します。

 リスト2は、ページのロード時にXAPファイルに同梱されたHTMLを読み込み、Silverlightのページ内に表示している例です。

リスト2 XAP内のHTMLをWebBrowserコントロールに表示している例(MainPage.xaml)
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    var helpFile = new Uri("Help.html", UriKind.Relative);
    var htmlResource = Application.GetResourceStream(helpFile);
    if (htmlResource == null)
        return;
    WebBrowser1.NavigateToString(new StreamReader(htmlResource.Stream).ReadToEnd());
}

 Help.htmlは、図6のようにコンテンツとして格納していますので、GetResourceStreamメソッドでファイルへのストリームを取得し、ReadToEndメソッドで読み込み、WebBrowserコントロールに引き渡しています。

図6 Helpファイルの設定
caption

 通常のインターネット上のコンテンツを表示する場合は、NavigateメソッドやSourceプロパティに、HTMLページへのURLを渡すだけです。

 WebBrowserコントロールは単に表示するだけでなく、InvokeScriptメソッドを利用してホストしたHTMLの要素をSilverlightから操作したり、Javascript側からwindow.external.notifyメソッドを通じて、SilverlightのScriptNotifyイベントを発生させたりできます。詳しくは、リンク先を確認してください。

HTMLブラシ

 WebBrowserコントロールは、WebBrowserBrushコントロールを利用することで、ブラシとしてSilverlightの要素に貼り付けることができます。貼り付けたWebページは、他のSilverlightのブラシと同様に、エフェクトをかけたり回転などの変換を行ったりできます。

 リスト3は、四角形にリスト2で指定したHTMLをブラシとして設定している例です。

リスト3 WebBrowserBrushの設定
<WebBrowser Grid.Row="1" Visibility="Collapsed" Name="WB1" Source="http://www.bing.com" />
<Rectangle Grid.Row="1" x:Name="brush" Width="350" Height="350"  Visibility="Visible" >
    <Rectangle.Fill>
        <WebBrowserBrush x:Name="htmlBrush" SourceName="WB1"/>
    </Rectangle.Fill>
    <Rectangle.Effect>
        <BlurEffect Radius="8"></BlurEffect>
    </Rectangle.Effect>
</Rectangle>

 筆者が試した限りでは、WebBrowserコントロールの表示中はWebBrowserBrushコントロールには、何も表示されませんでした。WebBrowserBrushコントロールを利用する場合は、WeBrowserコントロールのVisibilityプロパティを、Collapsedに設定する必要があります。

 WebBrowserBrushコントロールに表示されるコンテンツの再表示は、自動的に行われません。ユーザーのアクションをもとに書き換えたり、タイマーコントロールを使って定期的に書き換えたりする必要があります。リスト4は、ページ起動時にタイマーによってWebBrowserBrushコントロールを定期的に再描画している例です。

リスト4 WebBrowserコントロールの再描画
private DispatcherTimer dt = new DispatcherTimer();
public MainPage()
{
    InitializeComponent();

    dt.Interval = new TimeSpan(1 * 500);
    dt.Tick += new EventHandler(
        (_s, _e) => wBrush.Redraw()
        );
    dt.Start();
}

 PDC 09では、SilverlightからFlashで動作するYouTubeの画像を画面に張り付け、16面パズルにするデモンストレーションが話題を呼びました。

次のページ
まとめ

修正履歴

この記事は参考になりましたか?

Silverlight 4で作る新しいRIAアプリケーション連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト かるあ (杉山 洋一)(カルア(スギヤマ ヨウイチ))

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5770 2011/04/06 19:44

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー