試してみよう: Silverlight アプリケーションでの新しいページの動的読み込み

Dd185500.0b2c798e-86c6-4ea2-a8a6-5cf1f12be1e2(ja-jp,Expression.40).png

Microsoft Silverlight アプリケーションでは、さまざまな方法でコンテンツを動的に読み込むことができます。これにより、コンテンツ ページのオブジェクトが複数作成されます。そして、ユーザーがボタンをクリックしたときに、そのオブジェクトの 1 つが読み込まれコンテンツが表示されます。その他のソリューションについては、MSDN の「Silverlight documentation (Silverlight のドキュメント) Dd185500.xtlink_newWindow(ja-jp,Expression.40).png」 および Silverlight コミュニティの Web サイト Dd185500.xtlink_newWindow(ja-jp,Expression.40).png」を参照してください。

実行時にページを読み込むには

  1. 複数のコンテンツ ページを持つ Silverlight プロジェクトで、スタートアップ ページ (通常はPage.xaml) を開きます。この手順では、UserControl1.xaml と UserControl2.xaml の 2 つのコンテンツ ページがあるものとします。

    tip noteヒント :

    新しいコンテンツ ページを追加するには、[ファイル] メニューの [新しいアイテム] をクリックします。

  2. [ツール] パネルの [アセット] Dd185500.0d8b8d29-1af9-418f-8741-be3097d76eab(ja-jp,Expression.40).png をクリックし、[Border] レイアウト パネル Dd185500.be354518-c54c-4f86-9c57-0b4a9d384b3e(ja-jp,Expression.40).png を選択します。マウスを使用して、アートボードに罫線オブジェクトを描画します。

    Dd185500.b9dabf44-71aa-43cb-b4eb-f020a21b8756(ja-jp,Expression.40).png

    tip noteヒント :

    新しい [Border] オブジェクトの外観を変更するには、そのオブジェクトを選択し、[プロパティ] パネルの [ブラシ] および [外観] でプロパティを設定します。たとえば、BorderBrush プロパティを [単色ブラシ] Dd185500.3a66ec96-47bb-47fc-8876-6b9456feec3a(ja-jp,Expression.40).png に設定し、BorderThickness プロパティを 2 に設定します。

  3. [オブジェクトとタイムライン] パネルで、[Border] オブジェクトを右クリックし、[名前の変更] を選択してから、後でこのオブジェクトを分離コード ファイル内で参照できるようにオブジェクト名を [PageContainer] に変更します。

  4. [オブジェクトとタイムライン] パネルで [LayoutRoot] オブジェクトをクリックしてアクティブにします。[LayoutRoot] の周囲に黄色の罫線が表示され、アートボードに描画したすべての新しいオブジェクトが [LayoutRoot] の子になります。

  5. [ツール] パネルで [Button] Dd185500.05df1779-a68f-436b-b834-a91b7995a3ec(ja-jp,Expression.40).png をクリックし、[PageContainer] オブジェクトの外側のアートボード上にボタンを描画します。

    tip noteヒント :

    テキストが表示されるコントロールを描画したら、F2 キーを押してテキスト編集モードに切り替えて、テキストを変更できます。テキスト編集モードを終了するには、Esc キーを押します。

  6. [オブジェクトとタイムライン] パネルで、[Button] オブジェクトを選択します。

  7. [プロパティ] パネルで [イベント] Dd185500.6c67bb3b-e8a2-4a63-bad5-54d5c15b04dd(ja-jp,Expression.40).png をクリックし、プロパティ ビューからイベント ビューに切り替えます。

    tip noteヒント :

    [プロパティ] パネルをプロパティ ビューに戻すには、[プロパティ] Dd185500.cee1494c-ef95-4dd4-9fbc-9d02edfa78b7(ja-jp,Expression.40).png をクリックします。

  8. Click イベントの横にあるテキスト ボックスをダブルクリックします。Microsoft Expression Blend により、イベント ハンドラーの名前 (Button_Click) が生成されます。これは、実行中のアプリケーションでユーザーがボタンをクリックしたときに呼び出されます。

    Expression Blend により、イベント ハンドラーのコードがクリップボードにコピーされ、Microsoft Visual Studio 2010 でプロジェクトが開きます (Microsoft Visual Studio 2010 がインストールされている場合)。

    コード エディターがインストールされていない場合は、テキスト エディターでユーザー コントロールの分離コード ファイルを開き、次のコードを貼り付けます。

    private void Button_Click(object sender, RoutedEventArgs e)
    {
    
    }
    
    Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
    
    End Sub
    

    Visual Studio 2010 と Expression Blend の相互運用性の詳細については、「分離コード ファイルの変更」を参照してください。

  9. [PageContainer] オブジェクトに表示される 2 つのコンテンツ ページ間を切り替えるには、メモリ内にページのインスタンスを作成し、イベント ハンドラーでそのページのいずれかを [PageContainer] に追加します。たとえば、次の太字のコードを分離コード ファイルに貼り付けます。"UserControl1" および "UserControl2" は、プロジェクト内の他の 2 つのコンテンツ ページの名前です。

    tip noteヒント :

    [Border] コントロールは、子オブジェクトを 1 つしか持つことができません。Grid Dd185500.c76bbf09-1922-4f45-8d92-9c8ae64ca4a4(ja-jp,Expression.40).png レイアウト パネルなど、複数の子を含めることができるコントロールについては、コードが若干異なります。

    private UserControl1 uc1 = new UserControl1();  
    private UserControl2 uc2 = new UserControl2();  
    private bool atUC2 = false;  
    
    private void Button_Click(object sender, RoutedEventArgs e)
    {
      if (atUC2)  
      {  
        this.PageContainer.Child = uc1;  
      }  
      else  
      {  
        this.PageContainer.Child = uc2;  
      }  
      atUC2 = !atUC2;  
    }
    
    Private uc1 As UserControl1 = New UserControl1()  
    Private uc2 As UserControl2 = New UserControl2()  
    Private atUC2 As Boolean = False  
    
    Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
      If atUC2 Then  
        Me.PageContainer.Child = uc1  
      Else  
        Me.PageContainer.Child = uc2  
      End If  
      atUC2 = Not atUC2  
    End Sub
    
  10. プロジェクトをテストし (F5 キーを押します)、ボタンをクリックして、[PageContainer] に読み込まれた UserControl1 および UserControl2 を表示します。

    Dd185500.635377b3-9d34-40f7-89c4-c743582d38e5(ja-jp,Expression.40).png

トラブルシューティング

  • Expression Blend の [イベント] パネルをダブルクリックしたときに "分離コード ファイルを変更できません。次のクラスが見つかりません" というエラーが表示される場合は、外部コード エディター (通常は Microsoft Visual Studio) に切り替えてソリューションを再度読み込まなければならない可能性があります。再読み込みすると、見つからないクラスを定義する新しいファイルが追加されます。

  • Visual Studio 2010 で "ソリューションを読み込めません" というエラーが表示される場合は、Visual Studio 2010 用 Microsoft Silverlight Tools Dd185500.xtlink_newWindow(ja-jp,Expression.40).pngがインストールされていない可能性があります。ツールをインストールして、Expression Blend で [イベント] パネルをダブルクリックします。

  • 動的に読み込まれたページのコンテンツが表示されない場合は、[PageContainer] が小さすぎて、読み込んだコンテンツの一部を表示できない可能性があります。[PageContainer] を大きくするか、動的に読み込まれたページのレイアウト プロパティを次のように設定します。

    • [Width] = 自動

    • [Height] = 自動

    • [Margin] プロパティ = 0

  • クリックしたボタンが消える場合、[Button] オブジェクトを [LayoutRoot] の子としてではなく、[PageContainer] の子として追加した可能性があります ([PageContainer] オブジェクトの子は、追加したコードによって置き換えられます)。[オブジェクトとタイムライン] パネルで、[Button] オブジェクトを [LayoutRoot] パネルにドラッグし、[PageContainer] の外に移動できます。

  • 新しいオブジェクトを作成してページ読み込み (ボタンではなく) をトリガーし、Expression Blend で、Button_Click イベント ハンドラーの名前を、[プロパティ] パネルの [イベント] Dd185500.6c67bb3b-e8a2-4a63-bad5-54d5c15b04dd(ja-jp,Expression.40).png ビューの新しいオブジェクトにコピーすると、プロジェクトをテスト (F5 キー) するときに Web ブラウザーでエラーが発生する場合があります。これは、新しいオブジェクトの種類と一致しないイベント ハンドラーの誤った署名が原因である可能性があります。たとえば、ボタンの Click イベント ハンドラーの署名は次のようになります。

    private void Button_Click(object sender, RoutedEventArgs e)
    
    Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
    

    MouseLeftButtonDown イベント ハンドラーの署名は次のようになります。

    private void Path_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    
    Private Sub Path_MouseLeftButtonDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs)
    

    この問題を修正するには、[プロパティ] パネルの [イベント] ビュー Dd185500.6c67bb3b-e8a2-4a63-bad5-54d5c15b04dd(ja-jp,Expression.40).png で、正しいイベント ハンドラーの横にあるテキスト ボックス内をダブルクリックし、分離コード ファイルに正しい署名で新しいメソッドを作成します。

次のステップ

Copyright ©2011 by Microsoft Corporation. All rights reserved.