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

Silverlight Discussion :

Centrer un Control dynamiquement


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut Centrer un Control dynamiquement
    Salut,

    J'ai un stackpanel avec une série de user control.
    Je cherche à faire en sorte que quand l'utilisateur clique sur un des user control, celui ci se déplace au centre de ma page.

    je n'ai pas trouvé comment déplacer le user control.
    Je n'ai pas trouvé de propriété X et Y...

    Merci pour vos conseils.

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par julien.63 Voir le message
    Salut,

    J'ai un stackpanel avec une série de user control.
    Je cherche à faire en sorte que quand l'utilisateur clique sur un des user control, celui ci se déplace au centre de ma page.

    je n'ai pas trouvé comment déplacer le user control.
    Je n'ai pas trouvé de propriété X et Y...

    Merci pour vos conseils.
    Il faut mettre une transformation de type TranslateTransform dans la propriété RenderTransform de ton contrôlé. Cet objet à un propriété X et Y.

  3. #3
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut ça progresse
    <EDIT>
    Bon je progresse. Notamment grace à ce post :http://www.mostlydevelopers.com/most.../post/2008/10/
    /17/Get-ActualWidth-and-ActualHeight-in-Silverlight.aspx

    J'arrive à centrer chaque control sur la page. Mais quand je veux les faire revenir à leur place d'origine, ils se trouvent tous décalés... Pourtant la translation est la même mais en négatif...

    voici le code behind de MainPage.asmx.cs.

    Merci pour vos conseils

    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
     
    public partial class MainPage : UserControl
        {
            double centerX;
            double centerY;
            Duration duration;
            rectangle current;
            Point offset;
            Point center;
            string upSuffixe = "{0}_UP";
            string backSuffixe = "{0}_BACK";
     
            public MainPage()
            {
                InitializeComponent();
                this.Loaded += new RoutedEventHandler(MainPage_Loaded);
            }
     
            void MainPage_Loaded(object sender, RoutedEventArgs e)
            {
                centerX = (double)(LayoutRoot.Width / 2);
                centerY = (double)(LayoutRoot.Height / 2);
                center = new Point(centerX, centerY);
                duration = new Duration(TimeSpan.FromSeconds(1));
     
                foreach (rectangle r in LayoutRoot.Children)
                {
                    r.MouseLeftButtonUp += new MouseButtonEventHandler(r_MouseLeftButtonUp);
                    InitAnimation(r, true);
                    InitAnimation(r, false);
                }
            }
     
            void r_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
            {
                Storyboard playing;
                rectangle r = (sender as rectangle);
     
                // the user has clicked on the highlighted rectangle. we put it back to original place
                if (r != null && r.Equals(current) && r.IsUp)
                {
                    playing = (this.Resources[GetSBKey(r.Name, false)] as Storyboard);
                    if (playing != null)
                    {
                        playing.Begin();
                        r.IsUp = false;
                        return;
                    }
                }
     
                // otherwise the user has clicked on a NOT highlighted rectangle
                else
                {
                    // first check if a rectangle is highlighted -> then reduce it
                    if (current != null && r != null && current != r)
                    {
                        playing = (this.Resources[GetSBKey(current.Name, false)] as Storyboard);
                        if (playing != null)
                        {
                            playing.Begin();
                            current.IsUp = false;
                        }
                    }
     
                    if (r != null)
                    {
                        if (r.IsUp == false)
                        {
                            playing = (this.Resources[GetSBKey(r.Name, true)] as Storyboard);
                            if (playing != null)
                            {
                                r.IsUp = true;
                                current = r;
                                playing.Begin();
                            }
                        }
                    }
                }
            }
     
            //App.Current.RootVisual.Clip.Bounds.Y;
     
            private void InitAnimation(rectangle r, bool up)
            {
                Storyboard sb = new Storyboard();
                this.Resources.Add(GetSBKey(r.Name, up), sb);
     
                GeneralTransform gt = r.TransformToVisual(LayoutRoot);
                Point currentPosition = gt.Transform(new Point(0, 0));
                offset = new Point(center.X - currentPosition.X, centerY - currentPosition.Y);
     
                DoubleAnimation X = new DoubleAnimation();
                sb.Children.Add(X);
                X.To = up ? offset.X : offset.X * -1;
                X.Duration = duration;
                X.EasingFunction = new ElasticEase();
     
                DoubleAnimation Y = new DoubleAnimation();
                sb.Children.Add(Y);
                Y.To = up ? offset.Y : offset.Y  *-1;
                Y.Duration = duration;
                Y.EasingFunction = new ElasticEase();
     
                Storyboard.SetTarget(X, r);
                Storyboard.SetTargetProperty(X, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.X)"));
                Storyboard.SetTarget(Y, r);
                Storyboard.SetTargetProperty(Y, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.Y)"));
            }
     
     
            private TransformGroup GetTransFormGroup(int x, int y, double angle, double scale)
            {
                TransformGroup tg = new TransformGroup();
                TranslateTransform tt = new TranslateTransform();
                tt.X = x;
                tt.Y = y;
                tg.Children.Add(tt);
     
                ScaleTransform st = new ScaleTransform();
                st.ScaleX = scale;
                st.ScaleY = scale;
                tg.Children.Add(st);
     
                return tg;
            }
     
            private string GetSBKey(string rectangleName, bool up)
            {
                if (up)
                {
                    return String.Format(upSuffixe, rectangleName);
                }
                else
                {
                    return String.Format(backSuffixe, rectangleName);
                }
            }
        }

    </EDIT>


    Nickel merci pour la réponse.

    Mais j'ai encore un souci pour trouver le center de mon animation.

    J'ai essayé ceci mais sans succès. Width et Height sont à 0 tous les deux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public MainPage()
            {
                InitializeComponent();
                this.Loaded += new RoutedEventHandler(MainPage_Loaded);
            }
     
            void MainPage_Loaded(object sender, RoutedEventArgs e)
            {
                centerX = (int)(App.Current.RootVisual.RenderSize.Width / 2);
                centerY = (int)(App.Current.RootVisual.RenderSize.Height / 2);
            }
    Merci encore pour vos conseils

  4. #4
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut solution
    Voilà, après pas mal de tatonnement, ça fait a peu près ce que je veux.
    il faut encore que je gère le z-index.

    En pièce jointe le project VS2010. Libre à vous d'en disposer.
    Il y a sûrement une meilleure façon de faire, alors merci pour vos commentaires et suggestions.
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [VB6]comment supprimer dynamiquement un controle dynamique?
    Par totor le troll dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 06/07/2011, 21h10
  2. [VB.NET] Contrôle dynamique et évènements
    Par johann.C dans le forum ASP.NET
    Réponses: 4
    Dernier message: 30/11/2009, 10h45
  3. [C#]control dynamique
    Par inferno dans le forum ASP.NET
    Réponses: 5
    Dernier message: 25/08/2006, 12h08
  4. Réponses: 6
    Dernier message: 18/04/2005, 21h12
  5. [VB6] creation et gestion de contrôle dynamique
    Par olivierx dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 23/04/2004, 00h09

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