DebugSettings.LayoutCycleTracingLevel Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает или задает значение, указывающее, записывается ли трассировка цикла макета в собственный отладчик и уровень детализации, который записывается.
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
Значение свойства
Значение перечисления, указывающее, записывается ли трассировка цикла макета в собственный отладчик и уровень детализации, который записывается. Значение по умолчанию — None.
Комментарии
Когда возникает сбой цикла макета, этот уровень трассировки используется для определения того, какой объем сведений об отладке сохраняется в аварийных дампах и следует ли выводить какие-либо сведения в собственный отладчик.
-
None— Минимальные сведения о цикле макета сохраняются в уложенных исключениях в аварийных дампах. Нет выходных данных для собственного отладчика. -
Low— Минимальные сведения о цикле макета сохраняются в уложенных исключениях в аварийных дампах. Те же сведения также передаются в собственный отладчик. -
High— Предоставляется более подробная информация о цикле макета, которая включает всеMeasureвызовы иArrangeсо значениямиavailableSizeиfinalSize. Выходные данные сохраняются в уложенных исключениях в аварийных дампах. Те же сведения также передаются в собственный отладчик.
Вы также можете настроить DebugSettings.LayoutCycleDebugBreakLevel , чтобы активировать подключенный собственный отладчик для прерывания во время интересных событий, приводящих к потенциальному сбою цикла макета.
Макет XAML
Макет XAML — это процесс, в котором элементам присваивается размер и положение. Например, в вертикальном StackPanel макете каждому дочернему элементу присваивается положение, которое выравнивается по горизонтали и отображается последовательно по вертикали.
Размещение всех элементов в дереве XAML является итеративным, где процесс макета может привести к изменению, которое вызывает другой проход макета. Ожидается, что этот процесс будет конвергентным, а окончательный этап макета приведет к результату без активации каких-либо новых этапов макета. Если процесс не сходится (каждый проход макета запускает другой этап макета), процесс завершается, и приложение завершает работу с исключением цикла макета.
Ошибки цикла макета
По умолчанию приложения XAML, которые испытывают сбой цикла макета, предоставляют минимальные сведения для поиска и устранения проблемы.
- Возникает событие Application.UnhandledException , которое сообщает о сбое из-за проблемы с циклом макета.
- Некоторые сведения сохраняются в виде уложенных исключений.
Вы можете настроить LayoutCycleTracingLevel отправку данных трассировки цикла макета в выходные данные собственного отладчика, что упрощает доступ по сравнению с использованием уложенных исключений, а также повышает детализацию ведения журнала цикла макета для предоставления дополнительных сведений.
Ниже приведен пример выходных данных для сбоя цикла макета с помощью элемента управления 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"
Эти выходные данные журнала показывают, что Width (и в результате требуемый HorizontalDecreaseRect размер) элемента переключается между 866,400024 и 865,599976. Эти сведения можно использовать для дальнейшего изучения, включая использование DebugSettings.LayoutCycleDebugBreakLevel для взлома отладчика для изучения переменных и поиска проблем в коде макета.
Ниже приведены некоторые общие свойства, перечисленные в выходных данных трассировки:
- LayoutCycleCountdown: Указывает текущее число проходов макета. Количество проходов макета начинается с максимально допустимого прохода и отсчитывается до 0. Если процесс макета не сходится к концу прохода 0, возникает исключение цикла макета.
-
Classname: Имя класса подкласса,
FrameworkElementсвязанного с сообщением. -
Имя: Объект
FrameworkElement.Nameобъекта , связанногоFrameworkElementс сообщением, если таковой есть. -
Экземпляр: Адрес памяти внутреннего представления объекта ,
FrameworkElementсвязанного с сообщением. Это особенно полезно для фильтрации для трассировки сообщений для отдельных экземпляров. -
TypeIndex: Представляет внутренний индекс
FrameworkElementтипа класса. Обычно это можно игнорировать. - Setvalue: При установке свойства, влияющего на макет, отображается имя свойства, а также новое значение для некоторых типов значений.
-
Desiredsize: Если результат измерения
FrameworkElementотличается от ранее измеренного, это показывает изменение требуемого размера.