.NET TIPS

[Silverlight 2]コードにより別ウィンドウを開くには?[C#、VB]

デジタルアドバンテージ 遠藤 孝信
2009/12/17

 「TIPS:コードによりページを遷移するには?」で紹介しているように、HtmlWindowクラス(System.Windows.Browser名前空間)のNavigateメソッドでは、第2引数に「_blank」を指定することにより別ウィンドウで指定したページを開くことができる。

 しかしこの場合、例えばIE 8のタブ設定で「常に新しいタブでポップアップを開く」という設定にしていると、(別ウィンドウはタブとして開くが)新しく開いたタブがアクティブにならない(元のウィンドウが表示されたままとなる)。

 Silverlightから別ウィンドウを開く手段としては、HtmlPageクラス(System.Windows.Browser名前空間)にPopupWindowメソッドというメソッドも用意されており、こちらのメソッドでは、IE 8でウィンドウをタブとして開く場合でも、新しく開いたタブがアクティブになる。

 PopupWindowメソッドの呼び出し例は次のようになる(実際のコード記述例は後述)。

HtmlPage.PopupWindow(linkUri, "_blank", null);
HtmlPage.PopupWindow(linkUri, "_blank", Nothing)
PopupWindowメソッドの呼び出し例(上:C#、下:VB)

 メソッドの第1、第2引数はNavigateメソッドと同じで、遷移先のUriクラス(System名前空間)のオブジェクトと、遷移先のページを開くウィンドウ(あるいはフレーム)を指定する。

 第3引数には、HtmlPopupWindowOptionsクラス(System.Windows.Browser名前空間)のインスタンスにより、開くポップアップ・ウィンドウのさまざまなオプションを指定できるが、null/Nothingの場合はブラウザの既定値が使用される。

PopupWindowメソッドを使用したサンプル・アプリケーション

 次のSilverlightコントロールは、NavigateメソッドとPopupWindowメソッドでの挙動の違いを試すためのものだ。ボタンをクリックすると、それぞれのメソッドを使用して、Googleページを開く。

Microsoft Silverlight を取得
Silverlight 2のサンプル・アプリケーション
実際にボタンをクリックして試すことができる。

 このアプリケーションのVisual Studio 2008プロジェクト(プロジェクト名は「PopupWindowSample」)内の、MainPage.xamlとMainPage.xaml.cs/MainPage.xaml.vbの内容を以下に示す。

<UserControl x:Class="PopupWindowSample.MainPage"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Width="400" Height="300">

  <Grid x:Name="LayoutRoot">
    <StackPanel>

      <Button  Margin="10" Height="130" Click="Button_Click1"
        Content='HtmlPage.Window.Navigate(linkUri, "_blank")'/>

      <Button  Margin="10" Height="130" Click="Button_Click2"
        Content='HtmlPage.PopupWindow(linkUri, "_blank", null)'/>

    </StackPanel>
  </Grid>
</UserControl>
Page.xaml

using System;
using System.Windows;
using System.Windows.Controls;

using System.Windows.Browser;

namespace PopupWindowSample
{
  public partial class MainPage : UserControl
  {
    public MainPage()
    {
      InitializeComponent();
    }

    Uri linkUri = new Uri("http://www.google.co.jp");

    private void Button_Click1(object sender, RoutedEventArgs e)
    {
      HtmlPage.Window.Navigate(linkUri, "_blank");
    }

    private void Button_Click2(object sender, RoutedEventArgs e)
    {
      HtmlPage.PopupWindow(linkUri, "_blank", null);
    }
  }
}
Imports System.Windows.Browser

Partial Public Class MainPage
  Inherits UserControl

  Public Sub New()
    InitializeComponent()
  End Sub

  Dim linkUri As New Uri("http://www.google.co.jp")

  Private Sub Button_Click1(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
    HtmlPage.Window.Navigate(linkUri, "_blank")
  End Sub

  Private Sub Button_Click2(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
    HtmlPage.PopupWindow(linkUri, "_blank", New HtmlPopupWindowOptions())
  End Sub
End Class
上:MainPage.xaml.cs、下:MainPage.xaml.vb

 なお、PopupWindowメソッドで第3引数にHtmlPopupWindowOptionsオブジェクトを指定した場合には、開くウィンドウのサイズが自動的に一回り小さく設定される点に注意してほしい。これについては、MSDNのPopupWindowメソッドの項に記されている。End of Article

カテゴリ:Silverlight 2 処理対象:ブラウザ
使用ライブラリ:HtmlWindowクラス(System.Windows.Browser名前空間)
使用ライブラリ:HtmlPageクラス(System.Windows.Browser名前空間)
使用ライブラリ:Uriクラス(System名前空間)
関連TIPS:コードによりページを遷移するには?

この記事と関連性の高い別の.NET TIPS
[Silverlight 2]コードによりページを遷移するには?
クラス名指定のインスタンス作成時にコンストラクタへ引数を渡すには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間