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 :

Coordonnées d'une image dans un Canvas


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Lelio1407
    Inscrit en
    Juillet 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 126
    Par défaut Coordonnées d'une image dans un Canvas
    Bonjour,

    J'ai deux images dans un Canvas :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <Canvas  Name="Screen" Grid.Column="1" Grid.Row="1">
                <Image Name="BackGround" Source="Images/BackGround.png" Width="640" Height="480" Margin="20"></Image>
                <Image Name="BlueButton" Source="Images/BlueButton.png" Margin="30" MouseLeftButtonDown="BlueButton_MouseLeftButtonDown" MouseMove="BlueButton_MouseMove" MouseLeftButtonUp="BlueButton_MouseLeftButtonUp"></Image>
    </Canvas>

    Je souhaite pouvoir déplacer l'image BlueButton à la souris dans mon canvas. J'ai donc implémenté les 3 fonctions : MouseLeftButtonDown, MouseMove, et
    MouseLeftButtonUp.

    Lorsque je clique sur l'image BlueButton, je souhaite récupérer sa position dans le canvas :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void BlueButton_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                Point  _blueButtonControlPoint = new Point(Canvas.GetLeft(BlueButton), Canvas.GetTop(BlueButton));            
    Point mousePoint = new Point(Mouse.GetPosition((IInputElement)Screen.Parent).X, Mouse.GetPosition((IInputElement)Screen.Parent).Y);
                BlueButton.CaptureMouse();
            }

    Canvas.GetLeft(BlueButton) me renvoie une valeur NaN; Pourquoi?

    Savez vous sinon comment récupérer la position (X,Y) de mon image BlueButton dans son canvas.

  2. #2
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Hello,

    Tu peux utiliser la méthode GetPoint dans l'event handler:
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    Point p = e.GetPosition(tonCanvas);

    Sinon, cela retourne NaN car la valeur n'a pas été settée explicitement..

    bon courage,

  3. #3
    Membre confirmé Avatar de Lelio1407
    Inscrit en
    Juillet 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 126
    Par défaut
    Merci pour ta réponse, cela m'a mise sur la piste.
    Voici le code qui fonctionne :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private void BlueButton_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                _blueButtonControlPoint = new Point(Canvas.GetLeft((Image)sender), Canvas.GetTop((Image)sender));            
                mousePoint = new Point(Mouse.GetPosition((IInputElement)Screen.Parent).X, Mouse.GetPosition((IInputElement)Screen.Parent).Y);
                ((Image)sender).CaptureMouse();
            }
    Là, je récupère bien les coordonnées de mon image BlueButton (le sender) mais je ne comprends toujours pas pourquoi je ne peux pas mettre directement Canvas.GetLeft(BlueButton) plutôt que Canvas.GetLeft((Image)sender)....

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    +1 avec jmix90

    Soit tu affectes ses positions clairement :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
          <Image x:Name="BlueButton" Source="Images/BlueButton.png" Canvas.Left="30" Canvas.Top="30" ... />
    Et là ça fonctionnera.

    Soit tu utilises une solution comme la tienne ou bien :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    Vector offset = VisualTreeHelper.GetOffset(BlueButton);
    qui te retournera la position au final.

  5. #5
    Membre confirmé Avatar de Lelio1407
    Inscrit en
    Juillet 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 126
    Par défaut
    OK, merci à tous les deux, j'ai ma réponse. Il faut absolument que les valeurs canvas.left et canvas.top soit initialisée (setté?) dans le code xaml de mon BlueButton
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <Image Name="BlueButton" Source="Images/BlueButton.png" Margin="30" MouseLeftButtonDown="BlueButton_MouseLeftButtonDown" MouseMove="BlueButton_MouseMove" MouseLeftButtonUp="BlueButton_MouseLeftButtonUp" Canvas.Left="0" Canvas.Top="0"></Image>
    et ensuite, je peux récupérer ces valeurs dans mon code behind en appelant directement BlueButton :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Point _blueButtonControlPoint = new Point(Canvas.GetLeft(BlueButton), Canvas.GetTop(BlueButton));
    C'est tellement simple que j'ai presque honte de ma question...
    Merci!

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/03/2016, 20h22
  2. [Lazarus] Insérer une image dans un canvas
    Par anto974 dans le forum Lazarus
    Réponses: 3
    Dernier message: 14/05/2009, 19h09
  3. Insérer une image dans un canvas en XAML
    Par BlackStorm dans le forum Windows Forms
    Réponses: 7
    Dernier message: 12/07/2008, 15h39
  4. afficher une image dans un canvas
    Par alex.blais dans le forum Tkinter
    Réponses: 4
    Dernier message: 08/12/2007, 18h29
  5. afficher une image dans un canvas
    Par Arrakis dans le forum Tkinter
    Réponses: 1
    Dernier message: 05/03/2007, 13h22

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