none
xamlでのイベントトリガーの指定方法が分かりません RRS feed

  • 質問

  • またお世話になります。

    初心者以下の質問で大変恐縮ですが、どうかご指摘お願いします。


    MSのサンプルなどを参考にして、三角形が遠くから全面に近寄るだけのアニメーションを作成しました。

    このイベントを、ボタンクリック時に発生させたく、画面上にボタンを貼りつけました。

    ですが、ボタンクリック時にイベントを発生させる(xaml上のイベントトリガーの発生)方法が分かりません。


    検討違いかもしれませんが、88行目
    <EventTrigger RoutedEvent="Viewport3D.Loaded">

    <EventTrigger RoutedEvent="btn1.Click">
    に変更すると、「型btn1が見つかりませんでした」というエラーになります。


    こういった場合は、xamlではなく、
    C#のbtn1_Click()の中に、アニメーションに関する処理を記述するのでしょうか?


    どうかご指摘よろしくお願いします。

    <Window x:Class="WpfApplication2.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="306" Width="330">
    
    
        <Grid>
            <Button x:Name="btn1" Margin="29,0,0,35" Height="36" HorizontalAlignment="Left" VerticalAlignment="Bottom" Width="72" Click="btn1_Click">クリック</Button>
    
            <Viewport3D>
    
                <!-- ■カメラの位置や向き等の情報 -->
                <Viewport3D.Camera>
                    <PerspectiveCamera x:Name="Camera" 
                   FieldOfView="150" 
                   NearPlaneDistance="0.1" 
                   FarPlaneDistance="10" 
                   Position="-5,5,5" 
                   LookDirection="0,0,-10" 
                   UpDirection="0,10,0"/>
                </Viewport3D.Camera>
                <!--
                  FieldOfView="45" ←視野
                  NearPlaneDistance="0.1" ←描画開始位置
                  FarPlaneDistance="50" ←描画終了位置
                  Position="0,0,10" ←カメラの3D座標
                  LookDirection="0,0,-10" ←カメラの向き
                  UpDirection="0,10,0" ←カメラの上方向のベクトル
            -->
    
    
                <!-- ■3Dオブジェクト座標データ -->
                <ModelVisual3D x:Name="object3D">
                    <ModelVisual3D.Content>
                        <GeometryModel3D>
    
                            <!-- オブジェクトの情報を設定-->
                            <GeometryModel3D.Geometry>
                                <MeshGeometry3D>
                                    <!-- 三角ポリゴンの座標を指定-->
                                    <MeshGeometry3D.Positions>
                                        <Point3DCollection>
                                            -2,1,0 -2,-1,0 2,-1,0
    
                                        </Point3DCollection>
                                    </MeshGeometry3D.Positions>
    
                                    <!-- 色を塗る範囲の指定-->
                                    <MeshGeometry3D.TextureCoordinates>
                                        <PointCollection>
                                            0,0 0,1 1,2
    
                                        </PointCollection>
                                    </MeshGeometry3D.TextureCoordinates>
    
                                </MeshGeometry3D>
                            </GeometryModel3D.Geometry>
    
                            <!-- オブジェクトの色を指定-->
                            <GeometryModel3D.Material>
                                <MaterialGroup>
                                    <DiffuseMaterial>
                                        <DiffuseMaterial.Brush>
                                            <SolidColorBrush Color="#C22CCC"/>
                                        </DiffuseMaterial.Brush>
                                    </DiffuseMaterial>
                                </MaterialGroup>
                            </GeometryModel3D.Material>
    
                            <!-- スケールサイズを指定-->
                            <GeometryModel3D.Transform>
                                <ScaleTransform3D x:Name="myTranslateTransform3D" ScaleX="1" ScaleY="1" ScaleZ="1" CenterX="2" CenterY="-6" CenterZ="1" />
                            </GeometryModel3D.Transform>
    
                        </GeometryModel3D>
                    </ModelVisual3D.Content>
                </ModelVisual3D>
    
                <!-- ■ライト-->
                <ModelVisual3D x:Name="Light">
                    <ModelVisual3D.Content>
                        <DirectionalLight Color="#FFFFFF" Direction="1,-1,-1" />
                    </ModelVisual3D.Content>
                </ModelVisual3D>
    
                <!-- ■トリガー・ストーリーボードの設定 -->
                <Viewport3D.Triggers>
                    <EventTrigger RoutedEvent="Viewport3D.Loaded">
                        <BeginStoryboard>
                            <Storyboard>
    
                                <DoubleAnimation
                                Storyboard.TargetName="myTranslateTransform3D" 
                                Storyboard.TargetProperty="ScaleX"
                                To="9"
                                AutoReverse="False" RepeatBehavior="Forever" />
                                <DoubleAnimation
                                Storyboard.TargetName="myTranslateTransform3D" 
                                Storyboard.TargetProperty="ScaleY"
                                To="9"
                                AutoReverse="False" RepeatBehavior="Forever" />
                                <DoubleAnimation
                                Storyboard.TargetName="myTranslateTransform3D" 
                                Storyboard.TargetProperty="ScaleZ"
                                To="9" 
                                AutoReverse="False" RepeatBehavior="Forever" />
                                
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Viewport3D.Triggers>
    
    
            </Viewport3D>
        </Grid>
    
    </Window>
    
    2010年1月19日 6:54

回答

すべての返信

  • EventTrigger.SourceName プロパティ
    これのサンプルコードなんかどうでしょう。
    • 回答としてマーク sumi_sumi 2010年1月19日 8:17
    2010年1月19日 7:22
  • Hongliang 様

    ご返信有難う御座います。

    ご提示いただいたサンプルコードを参考にしまして実現することが出来ました。

    有難う御座います。

    やはりこういったアニメーションの処理なんかは、C#に記述する方がスマートなんでしょうか?
    こういった単純なプログラムならどっちでもいいが、より複雑になるとやはりC#上に・・・と言った感じでしょうか?

     

    2010年1月19日 8:21