【问题标题】:Layout Cycle Detected in Windows 10 but not in Windows 8.1在 Windows 10 中检测到布局周期,但在 Windows 8.1 中未检测到
【发布时间】:2016-08-14 03:09:27
【问题描述】:

我正在使用一个计时器,它每 10 秒更新一次布局,直到进度条没有完全填满。

在 Windows 8.1 中似乎没有问题,但在 Windows 10 中,会抛出 Layout Cycle Detected Exception。

【问题讨论】:

  • 看看这个MSDN Link的备注部分,看看有没有什么想法
  • @MarkHall 我能够确定问题所在。我试图设置新的垂直和水平偏移。值似乎在自行改变,导致布局更新处于无限循环中。

标签: c# windows windows-store-apps windows-10-universal windows-8.1-universal


【解决方案1】:

原来的代码是

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;
            }
        }

每次更新布局时都会调用它。

if 块导致无限循环,因为 ActualVerticalOffSet 和 ActualHorizo​​ntalOffSet 在 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;
}

直到微软到来

【讨论】:

    猜你喜欢
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 2018-04-22
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 2020-05-20
    相关资源
    最近更新 更多