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 :

wpf utilisation de MeasureOverride ArrangeOverride


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 352
    Par défaut wpf utilisation de MeasureOverride ArrangeOverride
    bonsoir,

    je suis en train de développer mon propre "Panel" et pour ce faire je dois utiliser les méthodes MeasureOverride er ArrangeOverride.
    A travers la lecture de différents articles j'ai compris que la première méthode est destinée à obtenir des "Children" la taille demandée, puis la seconde méthode leur impose la taille d'affichage
    Il semblerait qu'en fonction de la disposition des enfants dans le panel le contenu du code serait différent. de plus dans la méthode MeasureOverride on passe en paramètre entrée un "Size" D'où provient il?
    doit on créer des event pour lancer ces méthodes ou bien sont elles appelées automatiquement

    Je suis vraiment perdu avec ces méthodes
    Je compte encore une fois de plus sur vous

    Par avance merci

  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 : 44
    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
    Par défaut
    Citation Envoyé par TERRIBLE Voir le message
    méthode MeasureOverride on passe en paramètre entrée un "Size" D'où provient il?
    C'est la taille disponible pour afficher le contrôle. Par exemple, si le contrôle est dans une Border, c'est la taille à l'intérieur de la border (en tenant compte éventuellement du Padding)

    Citation Envoyé par TERRIBLE Voir le message
    doit on créer des event pour lancer ces méthodes ou bien sont elles appelées automatiquement
    Elles sont appelées automatiquement par MeasureCore et ArrangeCore

    Citation Envoyé par TERRIBLE Voir le message
    Je suis vraiment perdu avec ces méthodes
    Si ça peut te rassurer, tu n'es pas le seul

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 352
    Par défaut
    A quel moment Measurecore et arrangecore sont elles déclanchées
    par exemple dans une animation sont elles appelées à chaque évolution ?

  4. #4
    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 : 44
    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
    Par défaut
    Citation Envoyé par TERRIBLE Voir le message
    A quel moment Measurecore et arrangecore sont elles déclanchées
    par exemple dans une animation sont elles appelées à chaque évolution ?
    A priori avant l'affichage du contrôle, et à chaque fois que c'est nécessaire. Certaines DependencyProperty ont des attributs AffectsArrange et/ou AffectsMeasure dans les metadata qui font que si leur valeur change (par animation ou autre), ça provoque une nouvelle passe de disposition et/ou de mesure.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 352
    Par défaut
    quelle est la différence entre Measurecore et MeasureOveride
    en effet si je me réfère aux définition de msdn j'ai :
    MeasureCore :Implémente le comportement de système de disposition au niveau des passes de mesure de base pour FrameworkElement. (Hérité de FrameworkElement.)
    MeasureOverride Mesure les éléments enfants d'un Canvas en prévision de leur réorganisation pendant la passe ArrangeOverride. (Substitue FrameworkElement.MeasureOverride(Size).)
    Si measureOverride me semble à peu près claire Je suis perplexe devant MeasureCore

  6. #6
    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 : 44
    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
    Par défaut
    Tu n'as pas vraiment besoin d'en savoir plus sur MeasureCore en fait... C'est là qu'est défini le comportement de base, que tu peux personnaliser en overridant MeasureOverride. MeasureCore est sealed dans FrameworkElement de toutes façons, dont tu ne peux pas l'overrider.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 352
    Par défaut
    merci

  8. #8
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut MeasureOverride,ArrangeOverride
    bonjour terrible,j'attire ton attention sur une chose dans :
    1/MeasureOverride d'un Panel
    - un control panel octroie toujours la taille desiree a ses enfants.
    - la taille des ses enfants est une contrainte pour lui(car leur taille depend de leur contenu c'est pour cela qu'ils ont mis "desiredsize",exemple : si tu y mets un grid avec des hauteurs ou des largeurs fixes).
    Ceci parait conforme au bon sens et c'est une des souplesse du panel.
    (si quelqu'un cree un control dockpanel il doit tenir compte en plus de la propriete dock des enfants,un controle viewbox considere availablesize comme infini)
    c'est pour cela que tu seras tente d'ecrire ,si la variable total de type Size represente le cumul des desired.width et desired.height des enfants :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If  availableSize < new size(total.Width,total.Height) Then
                    return  availableSize 
    Else 
                    return New Size(total.Width,total.Height)
     End If

    maintenant si jamais ton controle est heberge dans un stackpanel ou un viewbox alors "availablesize.width = double.Infinity" et "avalaiblesize.Height=double.Infinty"
    c'est pour cela qu'il faut modifier ton test pour tenir compte de ce piege:

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    If (Not Double.IsInfinity(availableSize.Width)) Then
                If (availableSize.Width < total.Width) Then
                    total.Width = availableSize.Width
                End If
    End If
    If (Not Double.IsInfinity(availableSize.Height)) Then
                If (availableSize.Height < total.Height) Then
                    total.Height = availableSize.Height
                End If
    End If
    Return total

    Ceci permettra d' avoir la taille idoine.
    (il y a d'autre controles windows qui ont dans avalaiblesize.Height ce double.Infinty )
    Dans ArrangeOverride il ne fera que placer ses enfants conforment à la "logique du type de panel" (stackpanel,dockpanel ou autre heritage)

    Il faut comprendre measureoverride comme un interrogation posee au control panel pour lui demander s'il peut honorer la "constraint availablesize" sinon il utilise la taille necessaire à ses enfants.

    Dans ArrangeOverride il ne fera que placer ses enfants conforment à la "logique du type de panel" (stackpanel,dockpanel ou autre heritage)
    L'utilite de ArrangeOverride est ailleurs que dans la taille .Ils ont en vue par exemple de disposer les enfants en forme circulaire ou semi-circulaire(cercle inscrit dans le rectangle total ci-dessus).

    2/ quand il s'agit de controle type graphique on peut imposer une taille au canvas tenant compte de la taille et position de ses enfants( shapes ou des objets visualdrawing) par exemple :
    - boucle sur les enfants avec
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    maxBottom= Math.Max(maxBottom,GetTop(child) +child.DesiredSize.Height)
    maxTop= Math.Max(maxTop,GetTop(child) +child.DesiredSize.Width)
    If double.IsNaN(maxBottom) or double.IsInfinity(maxBottom) then
                maxBottom = 0D
    End If
    idem pour maxTop

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    return New Size(maxBottom, maxTop).

    - la il faut evidemment implementer le scrolling et le zoom et gerer des viewports pour afficher les enfants car le nombre des enfants depend de l'utilisateur.

    Prends garde d'utiliser le scrolling des enfants si c'est des types UI (tres mauvais effet d'avoir des boutons,des textbox qu'il faut scroller pour les voir).
    bon code....

Discussions similaires

  1. [WPF]Utiliser controlTemplate programmatically
    Par Babas007 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 23/11/2010, 23h31
  2. [C#][WPF] Rendre un UserControl WPF utilisable depuis COM
    Par alavoler dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 27/10/2010, 17h23
  3. [WPF] Utilisation des commandes.
    Par ThitoO dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 23/04/2010, 12h19
  4. [wpf] utilisation de drawingImage
    Par TERRIBLE dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 28/03/2010, 14h31
  5. wpf utilisation de templatebinding
    Par TERRIBLE dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 15/05/2009, 09h55

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