1

Я использую таймер, который обновляет макет каждые 10 секунд, пока индикатор выполнения не заполняется полностью.Цикл компоновки, обнаруженный в Windows 10, но не в Windows 8.1

В Windows 8.1 не возникает никаких проблем, но в Windows 10 выбрано исключение цикла цикла.

+0

Взгляните на раздел замечаний этой [ссылки MSDN] (https://msdn.microsoft.com/en-us/library/windows/apps/ windows.ui.xaml.layoutcycleexception.aspx), чтобы узнать, дает ли он вам какие-либо идеи. –

+1

@MarkHall Мне удалось идентифицировать проблему. Я пытался установить New Vertical & Horizontal Offset. Значения, по-видимому, меняются сами по себе, заставляя обновленный макет находиться в бесконечном цикле. –

ответ

2

Исходный код был

private void SetVerticalOffSet() 
     { 
      Popup ParentPopup = this.Parent as Popup; 

      if (ParentPopup == null) 
       return; 

      double ActualVerticalOffset = ParentPopup.VerticalOffset; 
      double ActualHorizontalOffset = ParentPopup.HorizontalOffset; 

      double NewVerticalOffset = (Window.Current.Bounds.Height - DecryptionDialog_MainGrid.ActualHeight)/2; 
      double NewHorizontalOffset = (Window.Current.Bounds.Width - DecryptionDialog_MainGrid.ActualWidth)/2; 
      if (ActualVerticalOffset != NewVerticalOffset || ActualHorizontalOffset != NewHorizontalOffset) 
      { 
       ParentPopup.VerticalOffset = NewVerticalOffset; 
       ParentPopup.HorizontalOffset = NewHorizontalOffset; 
      } 
     } 

Он вызывается каждый раз, когда макет был обновлен.

Условный блок вызвал бесконечный цикл в качестве ActualVerticalOffSet & ActualHorizontalOffSet хранится меняется в ОС Windows 10. (в 10-м положении десятичной)

if (ActualVerticalOffset != NewVerticalOffset || ActualHorizontalOffset != NewHorizontalOffset) 
     { 
      ParentPopup.VerticalOffset = NewVerticalOffset; 
      ParentPopup.HorizontalOffset = NewHorizontalOffset; 
     } 

Ориентировочное Решение Это исправление

if (Math.Round(ActualVerticalOffset) != Math.Round(NewVerticalOffset) ||  Math.Round(ActualHorizontalOffset) != Math.Round(NewHorizontalOffset)) 
{ 
     ParentPopup.VerticalOffset = NewVerticalOffset; 
     ParentPopup.HorizontalOffset = NewHorizontalOffset; 
} 

До появления Microsoft