DebugSettings.LayoutCycleTracingLevel Propriété
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.
Obtient ou définit une valeur qui indique si le suivi du cycle de disposition est écrit dans le débogueur natif et le niveau de détail enregistré.
public:
property LayoutCycleTracingLevel LayoutCycleTracingLevel { LayoutCycleTracingLevel get(); void set(LayoutCycleTracingLevel value); };
LayoutCycleTracingLevel LayoutCycleTracingLevel();
void LayoutCycleTracingLevel(LayoutCycleTracingLevel value);
public LayoutCycleTracingLevel LayoutCycleTracingLevel { get; set; }
var layoutCycleTracingLevel = debugSettings.layoutCycleTracingLevel;
debugSettings.layoutCycleTracingLevel = layoutCycleTracingLevel;
Public Property LayoutCycleTracingLevel As LayoutCycleTracingLevel
Valeur de propriété
Valeur de l’énumération qui indique si le suivi du cycle de disposition est écrit dans le débogueur natif et le niveau de détail enregistré. Par défaut, il s’agit de None
.
Remarques
Lorsqu’un incident du cycle de disposition semble imminent, ce niveau de suivi est utilisé pour déterminer la quantité d’informations de débogage conservées dans les vidages sur incident et la sortie d’informations vers le débogueur natif.
-
None
- Les informations minimales sur le cycle de disposition sont conservées dans les exceptions rangées dans les vidages sur incident. Il n’existe aucune sortie pour le débogueur natif. -
Low
- Les informations minimales sur le cycle de disposition sont conservées dans les exceptions rangées dans les vidages sur incident. Les mêmes informations sont également générées vers le débogueur natif. -
High
- Des informations plus détaillées sur le cycle de disposition sont fournies, qui incluent tous lesMeasure
appels etArrange
avec leursavailableSize
valeurs etfinalSize
. La sortie est conservée dans les exceptions rangées dans les vidages sur incident. Les mêmes informations sont également générées vers le débogueur natif.
Vous pouvez également définir DebugSettings.LayoutCycleDebugBreakLevel pour déclencher un débogueur natif attaché pour l’interrompre lors d’événements intéressants menant à un incident potentiel du cycle de disposition.
Disposition XAML
La disposition XAML est le processus où les éléments reçoivent une taille et une position. Par exemple, dans une disposition verticale StackPanel
, chaque enfant reçoit une position telle qu’il s’aligne horizontalement et s’affiche séquentiellement verticalement.
La disposition de tous les éléments dans l’arborescence XAML est itérative, où le processus de disposition peut provoquer une modification qui déclenche une autre passe de disposition. Ce processus est censé converger, avec une passe de disposition finale produisant un résultat sans déclencher de nouvelles passes de disposition. Si le processus ne parvient pas à converger (chaque passe de disposition déclenche une autre passe de disposition), le processus est terminé et l’application se bloque avec une exception de cycle de disposition.
Erreurs de cycle de disposition
Par défaut, les applications XAML qui rencontrent un incident de cycle de disposition fournissent un minimum d’informations pour vous aider à trouver et à résoudre le problème :
- L’événement Application.UnhandledException est déclenché et vous informe que le blocage est dû à un problème de cycle de disposition.
- Certaines informations sont enregistrées dans des exceptions rangées.
Vous pouvez définir LayoutCycleTracingLevel
pour envoyer les informations de suivi du cycle de disposition à la sortie du débogueur natif, ce qui facilite l’accès à l’utilisation d’exceptions rangées, et pour augmenter le détail de la journalisation du cycle de disposition pour fournir plus d’informations.
Voici quelques exemples de sortie pour un incident de cycle de disposition impliquant le contrôle Slider :
[LayoutCycleTracing] "SetValue(Width=866.400024)","LayoutCycleCountdown: 7","ClassName: Microsoft.UI.Xaml.Shapes.Rectangle","Name: HorizontalDecreaseRect","Instance: 0x000001C67FB0EE70","TypeIndex: 701"
[LayoutCycleTracing] "DesiredSize changed, old: 865.599976x0.000000 new: 866.400024x0.000000","LayoutCycleCountdown: 6","ClassName: Microsoft.UI.Xaml.Shapes.Rectangle","Name: HorizontalDecreaseRect","Instance: 0x000001C67FB0EE70","TypeIndex: 701"
[LayoutCycleTracing] "SetValue(Width=865.599976)","LayoutCycleCountdown: 4","ClassName: Microsoft.UI.Xaml.Shapes.Rectangle","Name: HorizontalDecreaseRect","Instance: 0x000001C67FB0EE70","TypeIndex: 701"
[LayoutCycleTracing] "DesiredSize changed, old: 866.400024x0.000000 new: 865.599976x0.000000","LayoutCycleCountdown: 3","ClassName: Microsoft.UI.Xaml.Shapes.Rectangle","Name: HorizontalDecreaseRect","Instance: 0x000001C67FB0EE70","TypeIndex: 701"
[LayoutCycleTracing] "SetValue(Width=866.400024)","LayoutCycleCountdown: 1","ClassName: Microsoft.UI.Xaml.Shapes.Rectangle","Name: HorizontalDecreaseRect","Instance: 0x000001C67FB0EE70","TypeIndex: 701"
[LayoutCycleTracing] "DesiredSize changed, old: 865.599976x0.000000 new: 866.400024x0.000000","LayoutCycleCountdown: 0","ClassName: Microsoft.UI.Xaml.Shapes.Rectangle","Name: HorizontalDecreaseRect","Instance: 0x000001C67FB0EE70","TypeIndex: 701"
Cette sortie de journal indique que (et la Width
taille souhaitée résultante) de l’élément HorizontalDecreaseRect
bascule entre 866.400024 et 865.599976. Vous pouvez utiliser ces informations pour examiner plus en détail, notamment à l’aide de DebugSettings.LayoutCycleDebugBreakLevel pour entrer dans le débogueur afin d’examiner les variables, afin de trouver des problèmes dans votre code de disposition.
Voici quelques-unes des propriétés courantes répertoriées dans la sortie de suivi :
- LayoutCycleCountdown : Spécifie le nombre de passes de disposition actuel. Le nombre de passes de disposition commence au maximum de passes autorisées et compte jusqu’à 0. Si le processus de disposition ne converge pas à la fin du pas 0, une exception de cycle de disposition se produit.
-
Classname: Nom de classe de la
FrameworkElement
sous-classe associée au message. -
Nom:
FrameworkElement.Name
de associéFrameworkElement
au message, le cas échéant. -
Exemple: Adresse mémoire de la représentation interne du
FrameworkElement
associé au message. Cela est particulièrement utile pour filtrer afin de suivre les messages pour des instances individuelles. -
TypeIndex : Représente l’index interne du type de
FrameworkElement
classe. Cela peut généralement être ignoré. - SetValue : Lorsqu’une propriété qui affecte la disposition est définie, celle-ci répertorie le nom de la propriété et répertorie également la nouvelle valeur pour certains types de valeurs.
-
DesiredSize : Lorsque le résultat de la mesure d’un
FrameworkElement
est d’une taille différente de celle précédemment mesurée, cela montre la modification de la taille souhaitée.