IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

PB Modification d'une Storyboard à partir du code behind


Sujet :

Windows Presentation Foundation

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 47
    Points : 33
    Points
    33
    Par défaut PB Modification d'une Storyboard à partir du code behind
    Bonjour,

    Je suis en train de développer un UserControl WPF qui sera inséré dans une WinForm.
    Le Usercontrol est la représentation d'un cube en 3D que je veux déplaçable en XYZ soit par curseurs, soit par valeurs.

    Le cube, ses transformations 3D et un storyboard sont en XAML car j'envisage par la suite l'ajout d'autres objets et animations.

    Je bute sur la modification des From/To/By à partir du code behind.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
      Private Sub Bouton_Click(sender As Object, e As RoutedEventArgs) Handles Bouton.Click
     
       'Positionnement du cube au centre
        translateX.OffsetX = 0
        translateY.OffsetY = 0
        translateZ.OffsetZ = 0
     
        Dim sequ_anim As New Storyboard
     
        Dim myDoubleAnimation As New DoubleAnimation()
        myDoubleAnimation.By = 5
        myDoubleAnimation.Duration = New Duration(TimeSpan.FromSeconds(5))
     
        Storyboard.SetTargetName(myDoubleAnimation, "translateX")
        Storyboard.SetTargetProperty(myDoubleAnimation, New PropertyPath("OffsetX"))
        sequ_anim.Children.Add(myDoubleAnimation)
     
        sequ_anim.Begin()
     
      End Sub
    Le XAML est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    <UserControl x:Class="UserControl1"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 mc:Ignorable="d" 
                 d:DesignHeight="400" d:DesignWidth="600">
     
        <Grid  x:Name="grid1"  Background="LightGreen"   >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="200"/>
            </Grid.ColumnDefinitions>
     
            <!-- Place a Label control at the top of the view. -->
            <Label x:Name="label1"    
                   HorizontalAlignment="left" VerticalAlignment="Top"
                   TextBlock.TextAlignment="Left" FontSize="20" Foreground="Blue"  
                   Content="CUBE : Déplacements XYZ" 
                   Grid.Column="0" Grid.Row="0"
                   />
     
            <!-- Viewport3D is the rendering surface. -->
            <Viewport3D x:Name="Viewport1"
                        Grid.Column="0"  Margin="0,0,0,0" >
     
                <Viewport3D.RenderTransform>
                    <TransformGroup  x:Name="group1">
                        <ScaleTransform ScaleX="1" ScaleY="1"/>
                        <SkewTransform/>
                        <RotateTransform/>
                        <TranslateTransform/>
                    </TransformGroup>
                </Viewport3D.RenderTransform>
     
                <!-- Ajout d'une camera. -->
                <Viewport3D.Camera>
                    <PerspectiveCamera  x:Name="camera1"
                        Position="-70,-70,70" 
                        LookDirection="70,70,-70 "
                        UpDirection="1,1,0" />
                </Viewport3D.Camera>
     
                <!-- Ajout des modèles. -->
                <ModelVisual3D x:Name="ScenePrincipale" >
                    <ModelVisual3D.Content >
                        <Model3DGroup>
                            <!--Eclairages, MeshGeometry3D et DiffuseMaterial sont ajoutés au ModelVisual3D.-->
                            <DirectionalLight Color="White"  Direction="-100,-100,-100" />
                            <!--<AmbientLight Color="White" x:Name="Eclairage1" />-->
     
                            <!-- Défini le plan de travail. -->
                            <GeometryModel3D  x:Name="plan" >
                                <GeometryModel3D.Geometry>
                                    <MeshGeometry3D Positions="30,30,0    -30,30,0  -30,-30,0    30,-30,0"
                                                    TriangleIndices="0 1 2   2 3 0"  />
                                </GeometryModel3D.Geometry>
                                <GeometryModel3D.Material>
                                    <DiffuseMaterial>
                                        <DiffuseMaterial.Brush>
                                            <SolidColorBrush 
                                               Color="WhiteSmoke" 
                                               Opacity="1.0"/>
                                        </DiffuseMaterial.Brush>
                                    </DiffuseMaterial>
                                </GeometryModel3D.Material>
                                <GeometryModel3D.BackMaterial >
                                    <DiffuseMaterial>
                                        <DiffuseMaterial.Brush>
                                            <SolidColorBrush 
                                               Color="LightYellow" 
                                               Opacity="1.0"/>
                                        </DiffuseMaterial.Brush>
                                    </DiffuseMaterial>
                                </GeometryModel3D.BackMaterial>
                            </GeometryModel3D>
     
                        </Model3DGroup>
                    </ModelVisual3D.Content>
                </ModelVisual3D>
     
                <ModelVisual3D x:Name="Objets">
                    <ModelVisual3D.Content>
                        <Model3DGroup>
                            <!-- Defini un cube rouge. -->
                            <GeometryModel3D  x:Name="Cube1">
                                <GeometryModel3D.Geometry>
                                    <MeshGeometry3D Positions="0,0,0   10,0,0   10,10,0   0,10,0 
                                                    0,0,10   10,0,10   10,10,10   0,10,10"
                                                    TriangleIndices="0 3 1   1 3 2   0 4 3   4 7 3   4 6 7  
                                                    4 5 6  0 1 4   1 5 4   1 2 6   6 5 1   2 3 7   7 6 2 "/>
                                </GeometryModel3D.Geometry>
                                <GeometryModel3D.Material>
                                    <DiffuseMaterial>
                                        <DiffuseMaterial.Brush>
                                            <SolidColorBrush 
                                               Color="Red" 
                                               Opacity="1.0"
                                               />
                                        </DiffuseMaterial.Brush>
                                    </DiffuseMaterial>
                                </GeometryModel3D.Material>
                            </GeometryModel3D>
                        </Model3DGroup>
                    </ModelVisual3D.Content>
     
                    <ModelVisual3D.Transform>
                        <Transform3DGroup>
                            <!-- Translation suivant X. -->
                            <TranslateTransform3D x:Name="translateX"  />
                            <!-- Translation suivant Y. -->
                            <TranslateTransform3D x:Name="translateY"  />
                            <!-- Translation suivant Z. -->
                            <TranslateTransform3D x:Name="translateZ"  />
                        </Transform3DGroup>
                    </ModelVisual3D.Transform>
                </ModelVisual3D>
     
                <Viewport3D.Resources>
                    <Storyboard x:Key="story_transl"  
                                Storyboard.TargetName="cube_deplct">
     
                        <!--Déplacements en X, Y et Z (dans le même temps)-->
                        <DoubleAnimation 
                                    Storyboard.TargetName="translateX" 
                                    Storyboard.TargetProperty="OffsetX"
                                    To ="5" Duration="0:0:2"  BeginTime=" 00:00:00"
                                    AutoReverse="False"  FillBehavior="HoldEnd" />
     
                        <DoubleAnimation
                                    Storyboard.TargetName="translateY" 
                                    Storyboard.TargetProperty="OffsetY" 
                                    To ="5" Duration="0:0:2"  BeginTime=" 00:00:02"
                                    AutoReverse="False"   FillBehavior="HoldEnd" />
     
                        <DoubleAnimation
                                    Storyboard.TargetName="translateZ" 
                                    Storyboard.TargetProperty="OffsetZ" 
                                    To ="5" Duration="0:0:2"  BeginTime=" 00:00:04"
                                    AutoReverse="False"  FillBehavior="HoldEnd" />
                    </Storyboard>
                </Viewport3D.Resources>
            </Viewport3D>
     
     
            <Slider x:Name = "sliderTranslX"
                    Grid.Column="1"  HorizontalAlignment="Center"  VerticalAlignment="Top"
                    Width="100" Height="20"
                    Margin="0,200,0,0" 
                    Minimum =" -50" Maximum = "50" 
                    Value = "{Binding ElementName=translateX, Path=OffsetX }" 
                    ToolTip="Translation en X"  />
     
            <Slider x:Name = "sliderTranslY"
                    Grid.Column="1"  HorizontalAlignment="Center"  VerticalAlignment="Top"
                    Width="100" Height="20"
                    Margin="0,230,0,0" 
                    Minimum =" -50" Maximum = "50" 
                    Value = "{Binding ElementName=translateY, Path=OffsetY }" 
                    ToolTip="Translation en Y"  />
     
            <Slider x:Name = "sliderTranslZ"
                    Grid.Column="1"  HorizontalAlignment="Center"  VerticalAlignment="Top"
                    Width="100" Height="20"
                    Margin="0,260,0,0" 
                    Minimum =" -50" Maximum = "50" 
                    Value = "{Binding ElementName=translateZ, Path=OffsetZ }" 
                    ToolTip="Translation en Z" />
     
            <Slider x:Name = "sliderZoomCamera"
                    Grid.Column="1"  HorizontalAlignment="Center"  VerticalAlignment="Top"
                    Width="100" Height="20"
                    Margin="0,330,0,0" 
                    Minimum =" 10" Maximum = "80" 
                    Value = "{Binding ElementName = camera1  , Path=FieldOfView }" 
                    ToolTip="Zoom de la caméra"  />
     
            <Button x:Name = "Bouton"     Content="Button"    Click="Bouton_Click"
                    Grid.Column="1"  HorizontalAlignment="Center"  VerticalAlignment="Top"
                    Width="80" Height="20"
                    Margin="0,410,0,0" 
                    IsEnabled="True"
                    >
            </Button>
     
     
        </Grid>
     
     
    </UserControl>

    J'ai l'erreur suivant
    System.InvalidOperationException: 'Aucune portée de nom applicable n'existe pour résoudre le nom 'translateX'.'


    Je ne vois pas mon pb...


    Merci de votre lecture

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    à défaut de te dire d'où vient le problème, tu peux essayer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Storyboard.SetTarget(myDoubleAnimation, this.translateX)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 47
    Points : 33
    Points
    33
    Par défaut
    Bonjour Pol63,

    Merci de ta proposition mais je m'aperçois que je n'avais pas précisé que je codais en vbnet. Du coup l'instruction This ne passe pas.

    J'ai repris mon pb en recréant un nouveau projet et en reprenant le code.
    Maintenant c'est bon !

    Ci dessous le code XAML et vbnet pour ceux qui bloqueraient comme moi.

    XAML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    <Window x:Class="MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfTest3D_1"
            mc:Ignorable="d"
            Title="MainWindow" Height="472.27" Width="800">
        <Grid  x:Name="grid1"  Background="LightGreen"   >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="200"/>
            </Grid.ColumnDefinitions>
     
            <!-- Place a Label control at the top of the view. -->
            <Label x:Name="label1"    
                   HorizontalAlignment="left" VerticalAlignment="Top"
                   TextBlock.TextAlignment="Left" FontSize="20" Foreground="Blue"  
                   Content="CUBE : Déplacements XYZ" 
                   Grid.Column="0" Grid.Row="0" />
     
            <!-- Viewport3D is the rendering surface. -->
            <Viewport3D x:Name="Viewport1"
                        Grid.Column="0"  Margin="0,0,0,0" >
     
                <Viewport3D.RenderTransform>
                    <TransformGroup  x:Name="group1">
                        <ScaleTransform ScaleX="1" ScaleY="1"/>
                        <SkewTransform/>
                        <RotateTransform/>
                        <TranslateTransform/>
                    </TransformGroup>
                </Viewport3D.RenderTransform>
     
                <!-- Ajout d'une camera. -->
                <Viewport3D.Camera>
                    <PerspectiveCamera  x:Name="camera1"
                        Position="-70,-70,70" 
                        LookDirection="70,70,-70 "
                        UpDirection="1,1,0" />
                </Viewport3D.Camera>
     
                <!-- Ajout des modèles. -->
                <ModelVisual3D x:Name="ScenePrincipale" >
                    <ModelVisual3D.Content >
                        <Model3DGroup>
                            <!--Eclairages, MeshGeometry3D et DiffuseMaterial sont ajoutés au ModelVisual3D.-->
                            <DirectionalLight Color="White"  Direction="-100,-100,-100" />
                            <!--<AmbientLight Color="White" x:Name="Eclairage1" />-->
     
                            <!-- Défini le plan de travail. -->
                            <GeometryModel3D  x:Name="plan" >
                                <GeometryModel3D.Geometry>
                                    <MeshGeometry3D Positions="30,30,0    -30,30,0  -30,-30,0    30,-30,0"
                                                    TriangleIndices="0 1 2   2 3 0"  />
                                </GeometryModel3D.Geometry>
                                <GeometryModel3D.Material>
                                    <DiffuseMaterial>
                                        <DiffuseMaterial.Brush>
                                            <SolidColorBrush 
                                               Color="WhiteSmoke" 
                                               Opacity="1.0"/>
                                        </DiffuseMaterial.Brush>
                                    </DiffuseMaterial>
                                </GeometryModel3D.Material>
                                <GeometryModel3D.BackMaterial >
                                    <DiffuseMaterial>
                                        <DiffuseMaterial.Brush>
                                            <SolidColorBrush 
                                               Color="LightYellow" 
                                               Opacity="1.0"/>
                                        </DiffuseMaterial.Brush>
                                    </DiffuseMaterial>
                                </GeometryModel3D.BackMaterial>
                            </GeometryModel3D>
     
                        </Model3DGroup>
                    </ModelVisual3D.Content>
                </ModelVisual3D>
     
                <ModelVisual3D x:Name="Objets">
                    <ModelVisual3D.Content>
                        <Model3DGroup>
                            <!-- Defini un cube rouge. -->
                            <GeometryModel3D  x:Name="Cube1">
                                <GeometryModel3D.Geometry>
                                    <MeshGeometry3D Positions="0,0,0   10,0,0   10,10,0   0,10,0 
                                                    0,0,10   10,0,10   10,10,10   0,10,10"
                                                    TriangleIndices="0 3 1   1 3 2   0 4 3   4 7 3   4 6 7  
                                                    4 5 6  0 1 4   1 5 4   1 2 6   6 5 1   2 3 7   7 6 2 "/>
                                </GeometryModel3D.Geometry>
                                <GeometryModel3D.Material>
                                    <DiffuseMaterial>
                                        <DiffuseMaterial.Brush>
                                            <SolidColorBrush 
                                               Color="Red" 
                                               Opacity="1.0"
                                               />
                                        </DiffuseMaterial.Brush>
                                    </DiffuseMaterial>
                                </GeometryModel3D.Material>
                            </GeometryModel3D>
                        </Model3DGroup>
                    </ModelVisual3D.Content>
     
                    <ModelVisual3D.Transform>
                        <Transform3DGroup>
                            <!-- Translation suivant X. -->
                            <TranslateTransform3D x:Name="translateX"  />
                            <!-- Translation suivant Y. -->
                            <TranslateTransform3D x:Name="translateY"  />
                            <!-- Translation suivant Z. -->
                            <TranslateTransform3D x:Name="translateZ"  />
                        </Transform3DGroup>
                    </ModelVisual3D.Transform>
                </ModelVisual3D>
     
                <Viewport3D.Resources>
                    <Storyboard x:Key="story_transl"  
                                Storyboard.TargetName="cube_deplct">
                    </Storyboard>
                </Viewport3D.Resources>
            </Viewport3D>
     
            <Label Content = "{Binding ElementName=translateX, Path=OffsetX }"
                   Grid.Column="1" HorizontalAlignment="Center"  VerticalAlignment="Top" Margin="0,10,0,0" />
     
            <Label Content = "{Binding ElementName=translateY, Path=OffsetY }"
                   Grid.Column="1" HorizontalAlignment="Center"  VerticalAlignment="Top" Margin="0,30,0,0" />
     
            <Label Content = "{Binding ElementName=translateZ, Path=OffsetZ }"
                   Grid.Column="1" HorizontalAlignment="Center"  VerticalAlignment="Top" Margin="0,50,0,0" />
     
            <Slider x:Name = "sliderTranslX"
                    Grid.Column="1"  HorizontalAlignment="Center"  VerticalAlignment="Top"
                    Width="100" Height="20"
                    Margin="0,100,0,0" 
                    Minimum =" -50" Maximum = "50" 
                    Value = "{Binding ElementName=translateX, Path=OffsetX }" 
                    ToolTip="Translation en X"  />
     
            <Slider x:Name = "sliderTranslY"
                    Grid.Column="1"  HorizontalAlignment="Center"  VerticalAlignment="Top"
                    Width="100" Height="20"
                    Margin="0,130,0,0" 
                    Minimum =" -50" Maximum = "50" 
                    Value = "{Binding ElementName=translateY, Path=OffsetY }" 
                    ToolTip="Translation en Y"  />
     
            <Slider x:Name = "sliderTranslZ"
                    Grid.Column="1"  HorizontalAlignment="Center"  VerticalAlignment="Top"
                    Width="100" Height="20"
                    Margin="0,160,0,0" 
                    Minimum =" -50" Maximum = "50" 
                    Value = "{Binding ElementName=translateZ, Path=OffsetZ }" 
                    ToolTip="Translation en Z" />
     
            <Slider x:Name = "sliderZoomCamera"
                    Grid.Column="1"  HorizontalAlignment="Center"  VerticalAlignment="Top"
                    Width="100" Height="20"
                    Margin="0,230,0,0" 
                    Minimum =" 10" Maximum = "80" 
                    Value = "{Binding ElementName = camera1  , Path=FieldOfView }" 
                    ToolTip="Zoom de la caméra"  />
     
            <Button x:Name = "BPanim"     Content="ANIM"    Click="BPanim_Click"
                    Grid.Column="1"  HorizontalAlignment="Center"  VerticalAlignment="Top"
                    Width="100" Height="20"
                    Margin="0,280,0,0" 
                    >
            </Button>
     
            <Button x:Name = "BPraz"     Content="RAZ POSITION"    Click="BPraz_Click"
                    Grid.Column="1"  HorizontalAlignment="Center"  VerticalAlignment="Top"
                    Width="100" Height="20"
                    Margin="0,310,0,0" 
                    >
            </Button>
     
            <Button x:Name = "BPstop_anim"     Content="STOP ANIM"    Click="BPstop_anim_Click"
                    Grid.Column="1"  HorizontalAlignment="Center"  VerticalAlignment="Top"
                    Width="100" Height="20"
                    Margin="0,340,0,0" 
                    >
            </Button>
     
        </Grid>
    </Window>
    vbnet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    Imports System.Windows.Media.Media3D
    Imports System.Windows.Media.Animation
     
    Class MainWindow
     
      Dim WithEvents OffsetXanimation As New DoubleAnimation()
      Dim WithEvents OffsetYanimation As New DoubleAnimation()
      Dim WithEvents OffsetZanimation As New DoubleAnimation()
      Dim WithEvents sequ_anim As New Storyboard()
     
      Dim IncDeplct As Integer = 0
     
      Dim PosX As Double
      Dim PosY As Double
      Dim PosZ As Double
     
     
     
      Private Sub Window1_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
        'Parametrage des pistes temps
        OffsetXanimation.FillBehavior = FillBehavior.HoldEnd
        OffsetYanimation.FillBehavior = FillBehavior.HoldEnd
        OffsetZanimation.FillBehavior = FillBehavior.HoldEnd
     
        'association de l'animation xaml du cube avec un objet storyboard du code behind
        sequ_anim = Viewport1.Resources("story_transl")
     
        'associations des pistes, transform et variables à animer avec le container storyboard
        Storyboard.SetTargetName(OffsetXanimation, "translateX")
        Storyboard.SetTargetProperty(OffsetXanimation, New PropertyPath("OffsetX"))
        Storyboard.SetTargetName(OffsetYanimation, "translateY")
        Storyboard.SetTargetProperty(OffsetYanimation, New PropertyPath("OffsetY"))
        Storyboard.SetTargetName(OffsetZanimation, "translateZ")
        Storyboard.SetTargetProperty(OffsetZanimation, New PropertyPath("OffsetZ"))
     
        'associations des transform avec le storyboard du code behind
        sequ_anim.Children.Add(OffsetXanimation)
        sequ_anim.Children.Add(OffsetYanimation)
        sequ_anim.Children.Add(OffsetZanimation)
     
        sequ_anim.FillBehavior = FillBehavior.HoldEnd
     
      End Sub
      Private Sub Window1_UnLoaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Unloaded
     
        sequ_anim.Remove()    'permet de libérer des ressources processeur
     
      End Sub
     
     
      Private Sub BPanim_Click(sender As Object, e As RoutedEventArgs) Handles BPanim.Click
        Static i As Integer = 0
     
        e.Handled = True   'pour éviter le double passage dans le sub sur un click - bloque l'événement
     
        'Si premier appui => positionnement spécifique du cube en X10,Y10,Z10
        If IncDeplct = 0 Then
          translateX.OffsetX = 10
          translateY.OffsetY = 10
          translateZ.OffsetZ = 10
        End If
     
        IncDeplct += 3     'Incrément de la valeur de deplct
        PosX = IncDeplct
        PosY = IncDeplct
        PosZ = IncDeplct
     
        'Parametrage des temps des time lines
        With OffsetXanimation
          .BeginTime = New TimeSpan(0, 0, 0)
          .Duration = New Duration(TimeSpan.FromSeconds(2))
        End With
        With OffsetYanimation
          .BeginTime = New TimeSpan(0, 0, 2)
          .Duration = New Duration(TimeSpan.FromSeconds(2))
        End With
        With OffsetZanimation
          .BeginTime = New TimeSpan(0, 0, 4)
          .Duration = New Duration(TimeSpan.FromSeconds(2))
        End With
     
        i += 1
        BPanim.Content = "ANIM " & i.ToString  'comptage du nb d'appui
        Infos.Content = "animation en cours"
     
        Deplct(PosX, PosY, PosZ)
     
      End Sub
     
      Private Sub BPraz_Click(sender As Object, e As RoutedEventArgs) Handles BPraz.Click
        Static i As Integer = 0
     
        e.Handled = True   'pour éviter le double passage dans le sub sur un click - bloque l'événement
        i += 1
        BPraz.Content = "RAZ " & i.ToString     'comptage du nb d'appui
        translateX.OffsetX = 0
        translateY.OffsetY = 0
        translateZ.OffsetZ = 0
        Infos.Content = "positionnement X0 Y0 Z0"
     
      End Sub
     
      Private Sub BPstop_anim_Click(sender As Object, e As RoutedEventArgs)
        'Parametrage des temps des time lines   (retour X,Y,Z ensembles)
        With OffsetXanimation
          .BeginTime = New TimeSpan(0, 0, 0)
          .Duration = New Duration(TimeSpan.FromSeconds(2))
        End With
        With OffsetYanimation
          .BeginTime = New TimeSpan(0, 0, 0)
          .Duration = New Duration(TimeSpan.FromSeconds(2))
        End With
        With OffsetZanimation
          .BeginTime = New TimeSpan(0, 0, 0)
          .Duration = New Duration(TimeSpan.FromSeconds(2))
        End With
        'Dde deplct animé vers X=0 Y=0 Z=0
        PosX = 0
        PosY = 0
        PosZ = 0
        OffsetXanimation.To = PosX
        OffsetYanimation.To = PosY
        OffsetZanimation.To = PosZ
        sequ_anim.Begin()
     
      End Sub
     
      Private Sub FinAnimation(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles sequ_anim.Completed
        Infos.Content = "animation terminée"
        sequ_anim.Stop()
        'pb après le stop, les valeurs X,Y et Z reprennent leurs valeurs initiales ...
     
        'SOLUTION ?   positionner le cube sur les valeurs finales de l'animation ...
        translateX.OffsetX = PosX
        translateY.OffsetY = PosY
        translateZ.OffsetZ = PosZ
     
      End Sub
     
     
      Private Sub Deplct(X As Double, Y As Double, Z As Double)
        OffsetXanimation.To = X
        OffsetYanimation.To = Y
        OffsetZanimation.To = Z
        sequ_anim.Begin()
     
      End Sub
     
    End Class
    C'est ma réponse à ma question

    Je passe en résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/08/2008, 17h27
  2. Réponses: 27
    Dernier message: 23/04/2008, 18h11
  3. Fermer une TForm à partir du code dans OnShow
    Par FredericB dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/09/2007, 00h37
  4. Enregistrer des données dans une table à partir du code
    Par Ragnarok85 dans le forum Access
    Réponses: 4
    Dernier message: 24/01/2007, 13h03
  5. Comment créer une page HTML à partir du code behind ?
    Par totoche9 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 01/08/2006, 13h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo