16章:チュートリアル15:アニメーションの作成 (VB)

    作成2013.03.11

  1. 参照元情報
     簡単 WebBrowser の作成は(Visual Basic ガイド ツアー)
    「アニメーションの作成」にジャンプする
     作成方法の詳細は上記を参照願います。


  2. アニメーションの作成の完成ファイル
     アニメーションの作成の解説とおりに作業を実施すると、プロジェクトファイル群が完成します。
     完成ファイルは以下からダウンロードできます。
     ダウンロード後は解凍してから使用してください。
      [アニメーションの作成]をダウンロードする。
     解凍すると「WpfAnimation」フォルダーがあります。
    注(1)「WpfAnimation」フォルダーの「WpfAnimation.sln」ファイルをダブルクリックすると「Microsoft Visual Basic 2010 Express」が起動します。
    注(2)メニューの「ウインド」_「ウインドレイアウトのリセット」で標準に戻ります。
    注(3)「ソリューションエクスプローラ」ウインドウ内の「MainWindow.xaml」をダブルクリックすると「デザイン」と「XAML」が表示されます。
    注(4)メニューの「表示」_「コード」を選択するとコードが表示されます。
    注(5)「LayoutSample.sln」の動作確認は「デバッグ」_「デバッグ開始」で実行します。デバッグ機能を用いて動作確認を行います。


  3. WpfAnimationの実行
    (1)「Microsoft Visual Basic 2010 Express」のデバッグ機能を使用します。
    (2)「デバッグ」_「デバッグ開始」を選択します。
    (3)MainWindow画面が表示されます。
    (4)画面のボールは自動的に移動します。
    (5)クローズボックスで終了します。


  4. 新規プロジェクトの作成
    (1)新規プロジェクト
     新規プロジェクトを作成すると「デザイナー」にはとXAMLが自動生成されます。

    (2)XAMLコードの作成
     サンプルのXAMLコードをコピーして、ペーストすると完成します。

    (3) クラスコード
    Class MainWindow
    End Class
    が自動生成されます。

    (4) その他
     サンプルのXAMLコードをコピーして、ペーストすると簡単に完成しますが、内容の詳細が理解できません。できるだけデザイナーを使用して、XAMLコードを自動生成すると理解が深まります。
     ただし、デザイナーの操作だけでは、完全なコードが生成できないようです。最終的にはXAMLコードの仕組みを理解して、コードの修正が必要になるようです。
     学習のため、XAMLコードを少し変更してみました。


  5. XAMLの全コード
    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="370" Width="450">
    
        <Canvas Width="400" Height="300" Background="#FFABDBAB">
        <!-- 背景色の設定 -->
        <Canvas.Triggers>
            <EventTrigger RoutedEvent="Canvas.Loaded">
                <!-- ボールのアニメーション -->
                <BeginStoryboard x:Name="myBoard">
                    <Storyboard>
                    <!-- 縦方向の移動 -->
                    <DoubleAnimation From="-10" To="290" Duration="0:0:0.7" Storyboard.TargetName="myEllipse" Storyboard.TargetProperty="(Canvas.Top)" AutoReverse="True" RepeatBehavior="Forever" />
                    <!-- 横方向の移動 -->
                    <DoubleAnimation From="-10" To="390" Duration="0:0:0.5" Storyboard.TargetName="myEllipse" Storyboard.TargetProperty="(Canvas.Left)" AutoReverse="True" RepeatBehavior="Forever" />
                    <!-- 横方向の移動R-->
                    <DoubleAnimation From="-20" To="380" Duration="0:0:2" Storyboard.TargetName="Ellipse1" Storyboard.TargetProperty="(Canvas.Left)" AutoReverse="True" RepeatBehavior="Forever" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
            </Canvas.Triggers>
            <!-- 赤いボールの記述 -->
            <Ellipse x:Name="myEllipse" Fill="Red"  Width="20" Height="20"  Canvas.Left="-10" Canvas.Top="-10" />
            <!-- 青いボールの記述 -->
            <Ellipse Canvas.Left="76" Canvas.Top="179" Height="40" Name="Ellipse1" Width="40">
                <Ellipse.Fill>
                    <RadialGradientBrush>
                        <GradientStop Color="#FFC341DB" Offset="0.3" />
                        <GradientStop Color="#FF1E8CEB" Offset="1" />
                    </RadialGradientBrush>
                </Ellipse.Fill>
            </Ellipse>
        </Canvas>
    </Window>
    


  6. XAMLの階層構造
    <Window>階層1
        <Canvas>階層2-1
           <Canvas.Triggers>階層3-1
               <EventTrigger>階層4-1
                   <BeginStoryboard>階層5-1
                       <Storyboard>階層6-1
                          <DoubleAnimation />階層7-1
                          <DoubleAnimation />
                          <DoubleAnimation />
                    </Storyboard>
                   </BeginStoryboard>
               </EventTrigger>
            </Canvas.Triggers>
            <Ellipse/>階層3-2
            <Ellipse >階層3-3
                <Ellipse.Fill>階層4-2
                    <RadialGradientBrush>階層5-2
                        <GradientStop />階層6-2
                        <GradientStop  />
                    </RadialGradientBrush>
                </Ellipse.Fill>
            </Ellipse>
        </Canvas>
    </Window>
    
    (1)XAMLを理解するには、まずXAMLの階層構造を理解する必要があります。(サンプルは上記のようになります。)
    (2)階層1:x:Class="MainWindow"を定義、Title="MainWindow" Height="370" Width="450"を定義します。
    (3) 階層2-1:階層2-1内に全てのコントロールが含まれます。
    (4)CanvasクラスにはTriggersプロパティがあるのが特徴的です。アニメーションはCanvasクラス内で実行する必要がありそうです。
    (5)階層3-1:FrameworkElement に対して定義されたアニメーションのトリガーのコレクションを取得します。
    (6)階層4-1:EventTriggerクラスはイベントへの応答で一連のアクションを適用するトリガを表します。
    (7)階層5-1:BeginStoryboardクラスはStoryboard を開始し、そのアニメーション群をそれぞれの対象となるオブジェクトやプロパティに適用します。
    (8)階層6-1:Storyboardクラスはタイムラインを使用してアニメーションを制御し、子アニメーションのオブジェクトやプロパティのターゲット化情報を提供します。
    (9)DoubleAnimationクラスは階層7-1:Duration で指定した期間にわたって、Double プロパティの値を 2 つのターゲット値の間で線形補間を使用してアニメーション化します。
    (10)以上の設定で図形のアニメーション化ができますが、これらは、セットで用いる必要があります。
    (11)階層3-2:赤い球を設定します。
    (12)階層3-3:青い球を設定します。
    (13)階層5-2と階層6-2はグラデーションを設定します。


  7. VBの全コード
     VBのコードはありません。


    感想:
     アニメーションはCanvasクラスを使用したとき、うまく動作します。TriggersプロパティはDockPanelクラスとStackPanelクラスにも存在します。このため、”Canvas”と”DockPanel”あるいは”StackPanel”置換してもXAMLコードにはエラーが発生しません。
     しかし、”DockPanel”あるいは”StackPanel”置換の場合は、アニメーションが動作しません。どうもアニメーションはCanvasクラスが必須のようです。
     VBコードを使用しないで、アニメーションができるのはすごい!!







17章:チュートリアル16:コントロールのテンプレート化と再利用(VB)に行く。

トップページに戻る。