C# 检测到布局循环-命令栏可见性

C# 检测到布局循环-命令栏可见性,c#,xaml,uwp,C#,Xaml,Uwp,今天我发现了一个布局周期。布局无法完成。在10586.29预览版本的手机上测试时,我的UWP应用程序出现异常。我花了一段时间才弄清楚发生了什么,发生在哪里,为什么发生,我还找到了简单的复制步骤 最简单的复制步骤是: 创建新项目 在具有可见性的主页面上向BottomAppBar添加新命令栏。已折叠 在某个点显示命令栏(例如,当页面加载时) 点击省略号(假设有AppBarButton,您想查看它们的标签) 代码: 已加载私有void主页(对象发送方、路由目标) { BottomBar.Visi

今天我发现了一个布局周期。布局无法完成。在10586.29预览版本的手机上测试时,我的UWP应用程序出现异常。我花了一段时间才弄清楚发生了什么,发生在哪里,为什么发生,我还找到了简单的复制步骤

最简单的复制步骤是:

  • 创建新项目
  • 在具有可见性的主页面上向BottomAppBar添加新命令栏。已折叠
  • 在某个点显示命令栏(例如,当页面加载时)
  • 点击省略号(假设有AppBarButton,您想查看它们的标签)
代码:


已加载私有void主页(对象发送方、路由目标)
{
BottomBar.Visibility=可见性.Visibility;
}
我在做一些不同的事情时遇到了这个错误:使用可视状态触发器和可视状态,因为有些情况下我希望我的CommandBar显示,有些情况下我不想显示,但似乎即使使用这3行代码也很容易重新编程


我知道解决方法(例如,从visible CommandBar开始,然后在不需要时隐藏它),但我很想知道为什么会发生这种情况,以及其他人是否也看到了它?一个奇怪的bug?

您是否注意到LayoutUpdate是否被一次又一次地偶然触发?显示的代码行是一个空白项目所需要的全部。或者在这些样式中是否有自定义样式和视觉状态更改。原因基于此错误,有东西导致UI递归地更新其布局。(我在Silverlight处理窗口大小事件等时看到过这一点)@TYY yea SL正是我所想的。尽管大多数情况下,仅仅通过正确地处理布局的其余部分来接受所讨论对象的可见性更改,就可以克服这个问题。这就是所需的全部代码。我知道这个错误通常意味着什么,我只是在这种情况下不会想到它。如果我在桌面上运行它就不会发生。。。
<Page.BottomAppBar>
    <CommandBar x:Name="BottomBar" Visibility="Collapsed" />
</Page.BottomAppBar>

private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    BottomBar.Visibility = Visibility.Visible;
}