SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(ComponentOne)

コンテキストメニューを持ったSilverlightアプリケーションの作成

ComponentOne Studio for SilverlightのC1ContextMenuコントロールを使ったWebページの作成

  • このエントリーをはてなブックマークに追加

メニューが選択された時の処理

 続いて、メニューがクリックされた時の処理をコンテキストメニューに組み込みます。グリッドの右側に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プロパティを見れば分かるので、それぞれのメニューに合わせてグラフィックスオブジェクトの回転角を変えます。

Visual Basic
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
C#
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を求めている方は、ぜひ導入を検討してみてはいかがでしょうか。

参考文献

製品情報

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
ComponentZine(ComponentOne)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5918 2011/10/13 16:29

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング