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 :

Récuperer des positions absolues dans une interface


Sujet :

Windows Presentation Foundation

  1. #1
    Membre du Club Avatar de Lelio1407
    Inscrit en
    Juillet 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 126
    Points : 68
    Points
    68
    Par défaut Récuperer des positions absolues dans une interface
    Bonjour,

    Je souhaite développer une application Photoshop-Like.
    Pour cela, j'ai créé un UserControl, IHM_Editor, qui va afficher mon espace de travail d'édition.
    Cet IHM_Editor est placé dans un TabControl de mon application principale (ci-dessous, sa déclaration dans le code XAML de ma fenêtre principale) :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <TabItem Header="IHM Editor" GotFocus="TabItem_DBE_GotFocus">
          <GroupBox BorderBrush="DarkGray">
                 <GroupBox.Header>
                        <Label FontSize="11">IHM Editor</Label>
                  </GroupBox.Header>
                  <Grid>
                         <IHMDll:IHM_Editor Name="IHM_Editor_UserControl" Canvas.Left="0" Canvas.Top="0"/>
                   </Grid>
            </GroupBox>
    </TabItem>

    Ce UserControl contient un dockPanel avec un menu et un canvas :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <DockPanel LastChildFill="True" Name="IHM_Editor_DockPanel">
            <!-- MENU -->
            <Menu Name="IHM_Editor_Menu" DockPanel.Dock="Top">
                 <!-- Declaration des MenuItems -->
            </Menu>
     
            <Canvas Name="IHM_Editor_Canvas" DockPanel.Dock="Top" Canvas.Left="0" Canvas.Top="0" >
             </Canvas>
        </DockPanel>

    Dans le menu, comme dans photoshop, lorsque je fais New ou Open, je crée une nouvelle fenêtre IHM_CurrentScreen_Window et je souhaite venir la positionner dans mon espace de travail, en 0,0 du Canvas.

    Le problème est qu'une fenêtre ne peut pas être "children" d'un canvas et que je ne peux donc pas utiliser les propriétés Left et Top.

    Ma question est donc la suivante :

    Comment puis-je trouver les coordonnées absolues de mon IHM_Editor_Canvas dans la fenêtre de l'application principale et les utiliser pour venir positionner ma fenêtre IHM_CurrentScreen_Window ?

    Je vous remercie d'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Tu peux utiliser la méthode PointToScreen, qui transforme les coordonnées relatives à un contrôle en coordonnées écran :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Point absolute = IHM_Editor_Canvas.PointToScreen(new Point(0, 0));

  3. #3
    Membre du Club Avatar de Lelio1407
    Inscrit en
    Juillet 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 126
    Points : 68
    Points
    68
    Par défaut
    OK, merci, c'est la bonne méthode, (code ci-dessous) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // A l'initialisation, on la place en 0,0 de Editor_Canvas.
    Point locationFromWindow = IHM_Editor_Canvas.TranslatePoint(new Point(0, 0), Application.Current.MainWindow);
     
    Point locationToScreen = Application.Current.MainWindow.PointToScreen(locationFromWindow);
     
    IHM_CurrentScreenView_Window.Top = locationToScreen.Y;
    IHM_CurrentScreenView_Window.Left = locationToScreen.X;
    Merci!

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

Discussions similaires

  1. [XL-2010] Remplacer nom de cellule par sa position absolue dans une formule par vba
    Par dar06 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/01/2014, 13h51
  2. Réponses: 2
    Dernier message: 08/01/2014, 11h47
  3. Récuperer des observation aléatoire dans une table
    Par sniper75 dans le forum SAS Base
    Réponses: 9
    Dernier message: 19/01/2012, 11h59
  4. Récuperer des variables vbs dans une page php
    Par tese84 dans le forum VBScript
    Réponses: 18
    Dernier message: 19/06/2007, 10h28
  5. Récuperer des caractères Majuscules dans une chaine
    Par Loïc59 dans le forum Général VBA
    Réponses: 3
    Dernier message: 17/05/2007, 00h14

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