リストで選択したページを表示する処理
最後に、右側のグリッドにC1HtmlHostコントロールとリストボックスをレイアウトし、リストで選択したWebページを表示する処理を組み込みます。
右側のグリッドにC1HtmlHostコントロールとリストボックスをレイアウトする
StackPanelを組み込み、ここにC1HtmlHostコントロールとListBoxコントロールを組み込みます。C1HtmlHostコントロールは、コードから操作します。名前を付け、デフォルトのURLを設定しておきます。
ListBoxコントロールは、イベントハンドラ「list1_SelectionChanged」を作成して、ListBoxItemオブジェクトでリスト項目を設定します。BorderThicknessプロパティを設定して枠線を表示しておくと、リストボックスらしく表示されます。
<StackPanel Grid.Column="1" Orientation="Vertical"> <c1ext:C1HtmlHost x:Name="host1" Width="500" Height="500" Margin="10" SourceUri="http://www.big.or.jp/~seto" > </c1ext:C1HtmlHost> <ListBox x:Name="list1" Grid.Column="1" SelectionChanged="list1_SelectionChanged" Width="150" Height="50" Margin="5" BorderThickness="2"> <ListBoxItem Content="Seto Home" /> <ListBoxItem Content="ComponentZine"/> <ListBoxItem Content="グレープシティ"/> <ListBoxItem Content="Power Tools"/> <ListBoxItem Content="SEShop com"/> <ListBox.Effect> <DropShadowEffect Color="Black"></DropShadowEffect> </ListBox.Effect> </ListBox> </StackPanel>
処理コードの作成
リストボックスでリスト項目が選択されると、SelectionChangedイベントが発生するので、このイベントハンドラでC1HtmlHostコントロールで表示するWebページのURLを切り替えます。
URLの切り替え処理は、C1HtmlHostコントロールのSourceUriプロパティにURLを設定するだけです。XAMLの記述では絶対URLをそのまま記述し、コードから設定する場合は絶対URLをUriクラスのインスタンスとして作成して設定します。
あとは、ListBoxコントロールでリストで選んだ項目の位置を表す「SelectedIndex」を使って、C1HtmlHostコントロールのSourceUriプロパティの値を切り替える処理を作ればできあがりです。
Partial Public Class MainPage Inherits UserControl Public Sub New() InitializeComponent() End Sub Private Sub list1_SelectionChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Select Case list1.SelectedIndex Case 0 host1.SourceUri = New Uri("http://www.big.or.jp/~seto/") Case 1 host1.SourceUri = New Uri("http://codezine.jp/") Case 2 host1.SourceUri = New Uri("http://www.grapecity.com/jp/") Case 3 host1.SourceUri = New Uri("http://www.grapecity.com/japan/support/database/dotnet_productlist.htm") Case 4 host1.SourceUri = New Uri("http://www.seshop.com/") End Select End Sub End Class
namespace sll_htmlhost_cs { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private void list1_SelectionChanged(object sender, SelectionChangedEventArgs e) { switch(list1.SelectedIndex) { case 0: host1.SourceUri = new Uri("http://www.big.or.jp/~seto/"); break; case 1: host1.SourceUri = new Uri("http://codezine.jp/"); break; case 2: host1.SourceUri = new Uri("http://www.grapecity.com/jp/"); break; case 3: host1.SourceUri = new Uri("http://www.grapecity.com/japan/support/database/dotnet_productlist.htm"); break; case 4: host1.SourceUri = new Uri("http://www.seshop.com/"); break; } } } }
まとめ
C1HtmlHostコントロールは、HTMLのIFrame機能に代わってページ内に他のHTMLページを表示できるため、作成するアプリケーションの幅がぐっと広がります。さらに、HTMLコードをWebページに変換して表示するので、データベースのデータや入力データをアプリケーション実行時にその場でWebページにして表示させることもできます。
今回はリストボックスで表示するWebページを切り替えましたが、同じComponentOne Studio for SilverlightにあるC1ExpanderやC1Accordion、C1Menuなどのコントロールと組み合わせれば、さらに使いやすく斬新な機能を持ったWebページを作ることができます。