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

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut ZoomPanCanvas : Utiliser RenderTransform pour appliquer le Zoom et Pan mais en gardant les dimensions du canva
    Bonjour

    je peux zoomer et "Translater (Pan)" les objets graphiques contenus dans mon ZoomPanCanvas, sauf que c'est tout le canvas qui Zoom ou bouge.
    comment avoir une sorte de Canvas constant ou "infini".?
    voici des paertie de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private TranslateTransform _pan = new TranslateTransform();
     
            public ZoomPanCanvas()
            {
                this.RenderTransform = _pan;
                this.MouseWheel += ZoomPanCanvas_MouseWheel;
                this.MouseLeftButtonDown += ZoomPanCanvas_MouseLeftButtonDown;
                this.MouseMove += ZoomPanCanvas_MouseMove;
                this.MouseLeftButtonUp += ZoomPanCanvas_MouseLeftButtonUp;
            }
    les events :
    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
     
     
     
            private void ZoomPanCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                this.Cursor = Cursors.Hand;
                dragStartPoint = e.GetPosition(this);
            }
     
     
            private void ZoomPanCanvas_MouseMove(object sender, MouseEventArgs e)
            {
     
     
     
                if (e.LeftButton == MouseButtonState.Pressed)
                {
                    Point point = e.GetPosition(this);
     
     
                    _pan.X += point.X - dragStartPoint.Value.X;
                    _pan.Y += point.Y - dragStartPoint.Value.Y;
     
     
                    dragStartPoint = point;
     
     
                }
            }
     
     
     
            private void ZoomPanCanvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
            {
     
                this.Cursor = Cursors.Arrow;
                dragStartPoint = null;
            }
     
            private void ZoomPanCanvas_MouseWheel(object sender, MouseWheelEventArgs e)
            {
                Point position = e.GetPosition(this);
     
                 scale *= e.Delta > 0 ? 1.1 : (1.0 / 1.1);
     
                this.transform.ScaleAt(scale, scale, position.X, position.Y);
                this.RenderTransform = new MatrixTransform(this.transform);
     
     
     
     
            }
    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 298
    Points : 1 893
    Points
    1 893
    Par défaut
    Je vois des fonctions ZoomIn sur ce contrôle (cf le github du contrôle https://github.com/mastertnt/XRay/bl...ontrol.cs#L342 )
    qui agit sur le contenu du contrôle et pas le contrôle lui même.

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par umfred Voir le message
    Je vois des fonctions ZoomIn sur ce contrôle (cf le github du contrôle https://github.com/mastertnt/XRay/bl...ontrol.cs#L342 )
    qui agit sur le contenu du contrôle et pas le contrôle lui même.
    oui, il prend un contenu et agit sur lui.
    mais ce que je voudrais faire c'est d'agir sur la totalite des "children" du canevas en meme temps soit :
    1. par utiliser une boucle est agir sur chacun des element graphiques du canvas car chaque element a son propre ScalTransform et TranslateTransform.
    2. ou alors en utilisant le Scaletransform et Translate Transform du Canvas lui meme, sauf que la malheuresment le canvas lui meme reagit en retrississant (zoom in) et on arrive a voir le background de son contenaire parent, le canvas tout entier bouge si je fait un TranslateTransform et ce que je voulais c'est une sorte de canvas qui qui agrde ces dimensions constantes une sorte de canvas infini.

Discussions similaires

  1. Réponses: 9
    Dernier message: 17/06/2015, 09h44
  2. [USB] [JNI] Utiliser JNI pour accéder aux ports USB
    Par Javatator dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 27/10/2005, 06h40
  3. Utiliser Alien pour convertir un deb en rpm
    Par aA189 dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 10/10/2004, 15h41
  4. Utiliser hylafax pour envoyer des fax
    Par ggnore dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 08/07/2004, 21h57
  5. utiliser "if" pour faire deux actions differente
    Par vampyer972 dans le forum C
    Réponses: 2
    Dernier message: 09/05/2004, 10h12

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