方法: Windows Phone 用の Web ブラウザー コントロールを使用して静的な Web コンテンツを表示する

2012/02/09

WebBrowser コントロールを使用することにより、フォーマット済みの静的なコンテンツをアプリケーション内に表示することができます。たとえば、ユーザーがいつでもアクセスできるように、ヘルプ テキストをアプリケーションのパッケージ内に含めたい場合などです。また、WebBrowser コントロールを使用すると、アプリケーションで SaveToString()()()() を使用することによって分離ストレージに保存した静的な Web コンテンツを表示できます。

次のコード例は、アプリケーションから取得した静的なコンテンツを分離ストレージに追加する方法と、WebBrowser コントロールを使用することによってそれを分離ストレージから表示する方法を示しています。分離ストレージの詳細については、「Windows Phone の分離ストレージの概要」を参照してください。

プロジェクトに静的なコンテンツを追加するには

  1. 次の HTML コードを持つ、readme.htm という名前の HTML ファイルを作成します。

    <html>
       <head><title>Sample Readme File</title></head>
       <body>
          <p>Sample Readme Content</p>
       </body>
    </html>
    
    
  2. Visual Studio で新しいソリューションまたは既存のソリューションを開きます。

  3. ソリューション エクスプローラーでプロジェクトの名前を右クリックし、[追加] をクリックしてから、[既存の項目] をクリックします。

  4. readme.htm ファイルの場所に移動し、ファイルを選択し、[追加] をクリックします。

  5. ソリューション エクスプローラーで、ファイルの名前をクリックします。[プロパティ] ウィンドウの [ビルド アクション] セクションが "コンテンツ" になっていることを確認します。

分離コード ページに次のリソースを追加して、次の名前空間を追加します。たとえば、既定の名前付け規則のメイン ページを使用している場合は、MainPage.xaml.cs を更新します。

using System.IO.IsolatedStorage;
using System.IO;
using System.Windows.Resources;

ツールを使用して、または手動で WebBrowser コントロールを追加できます。

ツールを使用して WebBrowser コントロールを追加する

ツールを使用して WebBrowser コントロールを追加するには

  1. Visual Studio で新しいソリューションまたは既存のソリューションを開きます。

  2. プロジェクトの XAML ファイルを表示した状態でツールボックスをクリックし、WebBrowser コントロールをデバイスの画像にドラッグします。

手動で WebBrowser コントロールを追加する

XAML 内で WebBrowser コントロールを作成することによって、手動で WebBrowser コントロールを作成できます。

XAML で WebBrowser コントロールを作成するには

  1. WebBrowser コントロールを追加するページの XAML ファイルを開きます。ソリューション エクスプローラーで、ページの .xaml ファイル (既定で新しいアプリケーションのメイン ページは "MainPage.xaml" と呼ばれる) を右クリックし、[開く] を選択します。

  2. ContentGrid 内に WebBrowser コントロールを追加します。例を示します。

    
    <Grid x:Name="ContentGrid" Grid.Row="1">
        <phone:WebBrowser HorizontalAlignment="Left" Margin="20,50,0,0" Name="webBrowser1" VerticalAlignment="Top" Height="500" Width="430" />
    </Grid>
    

分離コード ページを変更して、静的なファイルを分離ストレージに追加する際に役立つ次の 2 つの関数を取り込みます。たとえば、既定の名前付け規則のメイン ページを使用している場合は、MainPage.xaml.cs を更新します。

    private void SaveFilesToIsoStore()
    {
        //These files must match what is included in the application package,
        //or BinaryStream.Dispose below will throw an exception.
        string[] files = {
            "readme.htm"
        };

        IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication();

        if (false == isoStore.FileExists(files[0]))
        {
            foreach (string f in files)
            {
                StreamResourceInfo sr = Application.GetResourceStream(new Uri(f, UriKind.Relative));
                using (BinaryReader br = new BinaryReader(sr.Stream))
                {
                    byte[] data = br.ReadBytes((int)sr.Stream.Length);
                    SaveToIsoStore(f, data);
                }
            }
        }
    }

    private void SaveToIsoStore(string fileName, byte[] data)
    {
        string strBaseDir = string.Empty;
        string delimStr = "/";
        char[] delimiter = delimStr.ToCharArray();
        string[] dirsPath = fileName.Split(delimiter);

        //Get the IsoStore.
        IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication();

        //Re-create the directory structure.
        for (int i = 0; i < dirsPath.Length - 1; i++)
        {
            strBaseDir = System.IO.Path.Combine(strBaseDir, dirsPath[i]);
            isoStore.CreateDirectory(strBaseDir);
        }

        //Remove the existing file.
        if (isoStore.FileExists(fileName))
        {
            isoStore.DeleteFile(fileName);
        }

        //Write the file.
        using (BinaryWriter bw = new BinaryWriter(isoStore.CreateFile(fileName)))
        {
            bw.Write(data);
            bw.Close();
        }
    }

分離コード ページを変更して、次の 2 つの関数を取り込みます。これらは、静的なファイルを分離ストレージに追加する関数と、埋め込まれた WebBrowser コントロールに内容を表示する関数です。既存の MainPage 関数を上書きする必要があります。

public MainPage()
{    InitializeComponent();

    SupportedOrientations = SupportedPageOrientation.Portrait | SupportedPageOrientation.Landscape;

    webBrowser1.Loaded += WebBrowser_OnLoaded;
}

private void WebBrowser_OnLoaded(object sender, RoutedEventArgs e)
{
    SaveFilesToIsoStore();
    webBrowser1.Navigate(new Uri("readme.htm", UriKind.Relative));
}


表示: