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

C# Discussion :

[C# WPF] Animer des objets avec contrôle par bouton


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 1
    Par défaut [C# WPF] Animer des objets avec contrôle par bouton
    Bonjour,

    Je me suis lancé depuis peu dans le WPF et certaines choses m'échappent encore dans l'utilisation des Triggers et des StoryBoards...
    Comme montré ci dessous j'arrive à faire tourner un bouton sur lui même lorsque je clique dessus. Ce qui donne un effet sympa et fluide (je trouve). De plus je récupère le "Button_Click" pour déclencher un événement dans mon code c#. Tous est nickel.
    Mais si je veux par exemple déplacer (translater) ce bouton depuis un autre bouton (faire un genre de menu déroulant). En gros je clique sur un autre bouton et lui il apparaît et glisse au milieu de l'écran (Opacity et TranslateTransform par exemple).
    Mon "RoutedEvent" Mouse.MouseDown n'est appliqué qu'a ce bouton. Ce que j'aimerais savoir si il est possible de dire (comme dans le code c# normal) : Si le bouton du nom "BoutonNumero1" est cliqué alors tu lance la storyboard appliquée au "BoutonNumero2" .

    Code XAML : 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
    <Button Name="Gear" Click="Button_Click"
                Margin="10"
                HorizontalAlignment="Right"
                VerticalAlignment="Top"
                ToolTip="Settings">
                    <Button.Template>
                        <ControlTemplate>
                            <Border x:Name="theBorder"
                            BorderBrush="Transparent"
                            BorderThickness="2">
                                <Image Source="Sprocket.png" Height="45" Opacity="1" RenderTransformOrigin=".5,.5">
                                    <Image.RenderTransform>
                                        <RotateTransform x:Name="AnimatedRotateTransform" Angle="0" />
                                    </Image.RenderTransform>
                                    <Image.Triggers>
                                        <EventTrigger RoutedEvent="Mouse.MouseDown">
                                            <BeginStoryboard>
                                                <Storyboard>
                                                    <DoubleAnimation Storyboard.TargetName="AnimatedRotateTransform" 
                                                         Storyboard.TargetProperty="Angle" 
                                                         By="10"        
                                                         To="360" 
                                                         Duration="0:0:0.5" 
                                                         FillBehavior="Stop" />
                                                </Storyboard>
                                            </BeginStoryboard>
                                        </EventTrigger>
                                    </Image.Triggers>
                                </Image>
                            </Border>
                        </ControlTemplate>
                    </Button.Template>
                </Button>

    Merci de me donner un peu d'aide je bloque pas mal sur ce problème, j'ai essayé d'utiliser les Styles en me disant qu'ils avaient un contrôle plus "global" sur les objets contenus dans la fenêtre mais sans grande réussite.

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour

    Ce que j'aimerais savoir si il est possible de dire (comme dans le code c# normal) : Si le bouton du nom "BoutonNumero1" est cliqué alors tu lance la storyboard appliquée au "BoutonNumero2" .

    bah voici un code exemple qui utilise et 2 buttons "Start" et "Stop" pour demarrer l'animation d' un troisieme button...

    code xaml du user control hote à dropper sur un form:
    Code XAML : 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
    <UserControl x:Class="WpfComboExemple.ControlAnimation"
                 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="300" d:DesignWidth="300">
     
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>
     
        <StackPanel 
            Margin="20"
            Grid.Row="0">
            <StackPanel Orientation="Vertical" Margin="0,20,0,0">
                <Button Name="startButton">Start</Button>
                <Button Name="stopButton">Stop</Button>
     
                <StackPanel.Triggers>
                    <EventTrigger SourceName="startButton" RoutedEvent="Button.Click">
                        <BeginStoryboard Name="myStoryboard">
                            <Storyboard>
                                <MatrixAnimationUsingPath
                                    Storyboard.TargetName="ButtonMatrixTransform"
                                    Storyboard.TargetProperty="Matrix"
                                    DoesRotateWithTangent="True"
                                    Duration="0:0:5" 
                                    RepeatBehavior="Forever" >
                                    <MatrixAnimationUsingPath.PathGeometry>
                                        <PathGeometry 
                                            Figures="M 10,100 C 35,0 135,0 160,100 180,190 285,200 310,100" 
                                            />
                                    </MatrixAnimationUsingPath.PathGeometry>
                                </MatrixAnimationUsingPath>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                    <EventTrigger SourceName="stopButton" RoutedEvent="Button.Click">
                        <StopStoryboard BeginStoryboardName="myStoryboard" />
                    </EventTrigger>
                </StackPanel.Triggers>
     
            </StackPanel>
        </StackPanel>
        <StackPanel Grid.Row="1">
                <Button Name="SimpleButton" 
                        FontSize="20"
                        Content="SimpleButton"
                        Background="LightBlue" Foreground="Red"   
                       HorizontalAlignment="Center"
                         >
                    <Button.RenderTransform>
                        <MatrixTransform x:Name="ButtonMatrixTransform">
                            <MatrixTransform.Matrix >
                                <Matrix />
                            </MatrixTransform.Matrix>
                        </MatrixTransform>
                    </Button.RenderTransform>
                </Button>
            </StackPanel>
        </Grid>
    </UserControl>
    code xaml du form user :
    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <Window x:Class="WpfComboExemple.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
           xmlns:local="clr-namespace:WpfComboExemple" 
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Window1" Height="300" Width="300">
        <Grid>
            <local:ControlAnimation></local:ControlAnimation>
        </Grid>
    </Window>
    bon code...

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

Discussions similaires

  1. ACCESS : Saisir des données avec contrôle
    Par ra.radouane dans le forum IHM
    Réponses: 3
    Dernier message: 11/12/2008, 14h30
  2. Pinner des Objets avec DBMS_SHARED_POOL
    Par ilalaina dans le forum Administration
    Réponses: 2
    Dernier message: 15/11/2007, 12h03
  3. Placer des objets avec swing
    Par crossbowman dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 23/08/2007, 00h05
  4. Créer des objets avec Java Monkey Engine
    Par ToTo13 dans le forum 3D
    Réponses: 3
    Dernier message: 31/07/2007, 16h06
  5. [FLASH] Déplacement des objets avec clavier ???
    Par 3adoula dans le forum Flash
    Réponses: 1
    Dernier message: 07/01/2006, 02h03

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