メニューが選択された時の処理
続いて、メニューがクリックされた時の処理をコンテキストメニューに組み込みます。グリッドの右側にCanvasを配置し、ここにグラフィックスクラスのPolygonで三角形を描画します。そして、コンテキストメニューを設定し、描画した三角形を回転させます。
Canvasにコンテキストメニューを設定する
まず、XAMLでCanvas内にPolygonクラスを設定します。コードから操作するため、オブジェクトに名前を付けておきます。その下に、TextBoxコントロールの時と同じように、C1ContextMenuコントロールを設定します。TextBoxコントロールのコンテキストメニューとデザインを変え、メニュー項目の文字色とコンテキストメニューの枠線の色と太さを変えます。そして、イベントハンドラ「cmenu2_ItemClick」を設定します。
<Canvas Grid.Column="1"> <Polygon x:Name="poly1" Points="300,200 400,125 400,275 300,200" Stroke="Purple" StrokeThickness="2"> <Polygon.Fill> <SolidColorBrush Color="Blue" Opacity="0.4"/> </Polygon.Fill> </Polygon> <c1:C1ContextMenuService.ContextMenu> <c1:C1ContextMenu x:Name="cmenu2" ItemClick="cmenu2_ItemClick" Foreground="Tomato" BorderBrush="LimeGreen" BorderThickness="4" > </c1:C1ContextMenu> </c1:C1ContextMenuService.ContextMenu> </Canvas>
C1MenuItemオブジェクトでメニュー項目を2つ作成します。メニューは「右45度」と「左45度」の2つで、それぞれイメージファイルを組み込みます。
<c1:C1MenuItem Header="右45度"> <c1:C1MenuItem.Icon> <Image Source="cw.png" Width="16" Height="16"/> </c1:C1MenuItem.Icon> </c1:C1MenuItem > <c1:C1MenuItem Header="左45度" > <c1:C1MenuItem.Icon> <Image Source="ccw.png" Width="16" Height="16"/> </c1:C1MenuItem.Icon> </c1:C1MenuItem >
イベントハンドラの処理
ビハインドコードのイベントハンドラ「ItemClick」では、2つのメニュー項目に合わせて三角形を回転させます。まず、グラフィックスオブジェクトを回転させる準備をします(詳しくはMicrosoft Silverlight デベロッパー センターを参照)。
次に、イベントハンドラの引数「e」の「Source」プロパティから、クリックされたメニュー項目を取得します。どのメニューがクリックされたのかは、このオブジェクトのHeaderプロパティを見れば分かるので、それぞれのメニューに合わせてグラフィックスオブジェクトの回転角を変えます。
Imports C1.Silverlight ... ... Private Sub cmenu2_ItemClick(ByVal sender As System.Object, ByVal e As C1.Silverlight.SourcedEventArgs) Dim rt As New RotateTransform poly1.RenderTransform = rt rt.CenterX = 300 rt.CenterY = 200 Dim item As C1MenuItem = e.Source Select Case item.Header Case "右45度" rt.Angle = 45 Case "左45度" rt.Angle = -45 End Select End Sub
using C1.Silverlight; ... ... private void cmenu2_ItemClick(object sender, C1.Silverlight.SourcedEventArgs e) { RotateTransform rt = new RotateTransform(); poly1.RenderTransform = rt; rt.CenterX = 300; rt.CenterY = 200; C1MenuItem item = (C1MenuItem)e.Source; string s = (String)item.Header; switch(s) { case "右45度": rt.Angle = 45; break; case "左45度": rt.Angle = -45; break; } }
まとめ
C1ContextMenuコントロールは、WindowsフォームのContextMenuコントロールを使ったことがあれば違和感なく使いこなせるので、XAMLによるオブジェクト設定さえ覚えれば、簡単にWebページに実装できます。使いやすいUIを求めている方は、ぜひ導入を検討してみてはいかがでしょうか。