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 :

[vs WPF] Viewport


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut [vs WPF] Viewport
    Bonsoir,

    Comme mon post précédant je vais parler d un manque vis a vis de WPF

    Je cherche a compenser ce manque.
    Le but est plus ou moins de créer un google map like (avec zoom et drag a la souris).
    C'est clair qu'un viewport aurait été super mais je vais devoir faire sans...
    Mon contenu est un canvas avec plein d éléments dessus.

    Pour le zoom j'ai réussi avec un slider (au regret de ne pouvoir utiliser la roulette de la souris) qui fait du ScaleTransform sur le canvas ce dernier étant enfermé dans un ScrollViewer.
    Première surprise les ascenseurs du ScrollViewer ne diminues pas alors que le canvas grandi c'est étrange ... et je n'ai pas trouver de solution pour faire glisser ce canvas ...

    Si vous pouvez me donner un coup de pouce

    merci

  2. #2
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    Bon j'ai bidouiller la nuit, c'était finalement assez facile de faire sans viewport...

    Je vais partager mon code ça pourra servir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [...]
                    <Canvas x:Name="Can" Background="Beige" Width="4000" Height="3000" MouseLeftButtonDown="Can_MouseLeftButtonDown" MouseLeftButtonUp="Can_MouseLeftButtonUp"  MouseMove="Can_MouseMove">
                        <Canvas.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform x:Name="ZoomTransform"  />
                                <TranslateTransform x:Name="MoveTransform"/>
                            </TransformGroup>
                        </Canvas.RenderTransform>
                        [...]
                    </Canvas>
    [...]
    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
    public partial class Page : UserControl
        {
            private bool isDragging = false;
            private Point mouseOffset;
     
            public Page()
            {
                InitializeComponent();
            }
     
            private void Can_MouseMove(object sender, MouseEventArgs e)
            {
                if (isDragging)
                {
                    Point point = e.GetPosition(this);
                    Can.SetValue(Canvas.TopProperty, point.Y - mouseOffset.Y);
                    Can.SetValue(Canvas.LeftProperty, point.X - mouseOffset.X);
                }
            }
     
            private void Can_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
            {
                Can.ReleaseMouseCapture();
                isDragging = false;
            }
     
            private void Can_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                isDragging = true;
                mouseOffset = e.GetPosition(Can);
                Can.CaptureMouse();
            }
        }
    il me reste plus qu'a faire ne sorte qu'on ne puisse pas sortir le canvas de son viewer.

  3. #3
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    j'ajouterai une petite correction car cela ne marche plus lorsque l'on zoom ...

    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
            private void Can_MouseMove(object sender, MouseEventArgs e)
            {
                if (isDragging)
                {
                    Point point = e.GetPosition(this);
                    Can.SetValue(Canvas.TopProperty, (double)Can.GetValue(Canvas.TopProperty) + (point.Y - mouseOffset.Y));
                    Can.SetValue(Canvas.LeftProperty, (double)Can.GetValue(Canvas.LeftProperty) + (point.X - mouseOffset.X));
                    mouseOffset = point;
                }
            }
     
            private void Can_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
            {
                Can.ReleaseMouseCapture();
                isDragging = false;
            }
     
            private void Can_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                isDragging = true;
                mouseOffset = e.GetPosition(this);
                Can.CaptureMouse();
            }

    Bon jv aller revisser mes exam au lieu de faire mumuse moi

  4. #4
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    Bon y a un truc que j arrive pas a faire ...

    Je veux faire du zoom dans mon canvas a l'aide de transformation Scale mais le problème c'est que cela ne se centre pas (le canvas s'augmente ou diminue en bas a droite).
    Il y a les scaleimage qui semblent répondre a ce probleme mais comment gérer ca manulement sur un canvas ?

    mci

  5. #5
    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 anthyme Voir le message
    Bon y a un truc que j arrive pas a faire ...

    Je veux faire du zoom dans mon canvas a l'aide de transformation Scale mais le problème c'est que cela ne se centre pas (le canvas s'augmente ou diminue en bas a droite).
    Il y a les scaleimage qui semblent répondre a ce probleme mais comment gérer ca manulement sur un canvas ?

    mci
    Est-ce que tu as essayé de spécifier le CenterX et CenterY dans ta ScaleTransform ?

  6. #6
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    J'ai tester quelques valeurs (je ne sais pas a quoi corresponde ce X et ce Y) mais cela ne change pas le zoom.

    Juste pour donner le code behind (non present plus haut) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
            {
                ZoomTransform.ScaleX += e.NewValue - e.OldValue;
                ZoomTransform.ScaleY += e.NewValue - e.OldValue;
            }

Discussions similaires

  1. Wpf - petites questions
    Par DonJR dans le forum Windows Presentation Foundation
    Réponses: 12
    Dernier message: 05/11/2006, 11h33
  2. JScrollPane : modification du viewport
    Par Invité dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 18/08/2006, 16h13
  3. Documentation WPF ?
    Par NeoMan dans le forum Windows
    Réponses: 2
    Dernier message: 25/03/2006, 00h01
  4. [Swing][JScrollPane]le Viewport ne s'adapte pas au contenu
    Par Cyberwan dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 01/02/2006, 20h40
  5. taille du texte dans un viewport
    Par pitounette dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/07/2002, 12h06

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