FrameworkElement.MeasureOverride(Size) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Fournit le comportement de la passe « Mesure » du cycle de disposition. Les classes peuvent remplacer cette méthode pour définir leur propre comportement de passage « Measure ».
protected:
virtual Size MeasureOverride(Size availableSize) = MeasureOverride;
Size MeasureOverride(Size const& availableSize);
protected virtual Size MeasureOverride(Size availableSize);
function measureOverride(availableSize)
Protected Overridable Function MeasureOverride (availableSize As Size) As Size
Paramètres
- availableSize
- Size
Taille disponible que cet objet peut donner aux objets enfants. Infinity peut être spécifié sous forme de valeur pour indiquer que l’objet sera dimensionné en fonction du contenu disponible.
Retours
Taille dont cet objet a besoin pendant la disposition, en fonction de ses calculs des tailles allouées pour les objets enfants ou d’autres considérations telles qu’une taille de conteneur fixe.
Exemples
Cet exemple implémente MeasureOverride pour personnaliser la logique de passage « Measure » pour une implémentation de panneau personnalisé. Notez en particulier les aspects suivants du code :
- Itère sur les enfants.
- Pour chaque enfant, appelle Measure, à l’aide d’une taille qui est logique en fonction de la façon dont la logique du panneau traite le nombre d’enfants et sa propre limite de taille connue.
- Retourne sa taille (dans ce cas, ce panneau simple renvoie une taille fixe plutôt qu’une taille calculée lors de l’accumulation des mesures).
// First measure all children and return available size of panel
protected override Size MeasureOverride(Size availableSize)
{
// Measure first 9 children giving them space up to 100x100, remaining children get 0x0
int i = 0;
foreach (FrameworkElement child in Children)
{
if (i < 9)
{
child.Measure(new Size(100, 100));
}
else
{
child.Measure(new Size(0, 0));
}
i++;
}
// return the size available to the whole panel, which is 300x300
return new Size(300, 300);
}
'First measure all children and return available size of panel
Protected Overrides Function MeasureOverride(ByVal availableSize As Size) As Size
'Measure first 9 children giving them space up to 100x100, remaining children get 0x0
Dim i As Integer = 0
For Each child As FrameworkElement In Children
If i < 9 Then
child.Measure(New Size(100, 100))
Else
child.Measure(New Size(0, 0))
End If
i += 1
Next
'return the size available to the whole panel, which is 300x300
Return New Size(300, 300)
End Function
Remarques
Cette méthode a une implémentation par défaut qui effectue une disposition intégrée pour la plupart des classes dérivées de FrameworkElement . MeasureOverride fournit le comportement de Measure, chaque fois que Measure est appelé par la logique de disposition interne ou le code de votre propre application, y compris les méthodes MeasureOverride de votre propre pour d’autres classes. Si vous produisez un contrôle modèle, la logique MeasureOverride définit la logique de disposition de passe « Measure » spécifique de votre contrôle.
La conception générale de la façon dont les éléments passent par un processus de disposition lors de l’exécution de votre application est divisée en deux étapes : une passe « Mesure », puis une passe « Organiser ». Les auteurs de contrôles (ou auteurs de panneau) qui souhaitent personnaliser la passe « Measure » du traitement de la disposition doivent remplacer MeasureOverride. Votre implémentation doit effectuer les opérations suivantes :
- Itérer la collection particulière d’objets enfants de votre classe qui font partie de la disposition et appeler Measure sur chaque objet enfant.
- Obtenez immédiatement DesiredSize sur chaque enfant (cette propriété est définie en tant que propriété après l’appel de Measure ).
- Calculez la taille nette souhaitée du parent, en fonction de la mesure en cours d’exécution de la taille nécessaire pour les objets enfants. La valeur de retour de MeasureOverride doit être la propre taille souhaitée de l’objet, qui devient ensuite l’entrée Measure pour le parent de l’objet actif. Ce même processus se poursuit dans le système de disposition jusqu’à ce que la racine de l’arborescence page/objet soit atteinte. Au cours de ce processus, les objets enfants peuvent retourner une taille DesiredSize plus grande que la taille initiale availableSize pour indiquer que l’objet enfant souhaite plus d’espace. Cela peut être géré dans votre propre implémentation en introduisant une région défilante, en redimensionnement du contrôle parent, en établissant un ordre empilé ou un certain nombre de solutions pour mesurer ou organiser le contenu qui peut varier en fonction des fonctionnalités prévues de votre conteneur de disposition.