【发布时间】:2020-12-27 07:34:25
【问题描述】:
我的 MainPage 上有一个带有 WinUI2.4 NavigationView 的 UWP 应用。 在导航视图的框架中放置了三个页面。 第二个选项卡导航到一个带有 3 个按钮的页面,并带有一个点击事件。
<Button Grid.Row="0" Grid.Column="0" x:Name="lightButton" x:Uid="LightOn" Click="ActivateLight"/>
<Button Grid.Row="0" Grid.Column="1" x:Name="countButton" x:Uid="ShowCount" Click="GetLightCounter"/>
<Button Grid.Row="0" Grid.Column="2" x:Name="resetButton" x:Uid="ResetCount" Click="ResetLightCounter"/>
他们执行异步操作。一切正常。 除了现在我想在单击按钮时一起禁用 3 个按钮。只有在异步操作完成后,才应重新启用它们。
我在第二页写了一个方法
private void Freeze()
{
lightButton.IsEnabled = false;
resetButton.IsEnabled = false;
countButton.IsEnabled = false;
}
以及附带的 Unfreeze 方法,该方法应将所有内容再次设置为 true。我在 Event-callbacks 的开头调用了 Freeze 方法,在最后调用了 Unfreeze。
奇怪和意外的行为是,当我单击 3 个按钮中的任何一个时,现在 Freeze 方法可用,我的 NavigationView 导航到第一页。我不知道为什么。
我测试了什么。
- 在 Freeze 中评论所有内容:
private void Freeze()
{
//lightButton.IsEnabled = false;
//resetButton.IsEnabled = false;
//countButton.IsEnabled = false;
}
然后它再次按预期工作,没有导航到第一页
- 设置启用冻结中的所有按钮
private void Freeze()
{
lightButton.IsEnabled = true;
resetButton.IsEnabled = true;
countButton.IsEnabled = true;
}
这当然没有意义,但一切都按预期再次运行 - 没有导航。
- 仅禁用 1 个按钮
private void Freeze()
{
lightButton.IsEnabled = false;
//resetButton.IsEnabled = false;
//countButton.IsEnabled = false;
}
一切都按预期进行。
- 扔掉 bin/ 和 obj/ 文件夹
问题仍然存在。所以它必须是我的代码中的错误。 我不知道我应该去哪里找。有人知道我错过了什么吗?
编辑:重现问题的完整应用程序在这里:https://antamista.visualstudio.com/_git/TestAlbumControl?path=%2FTestAlbumControl%2FNavigationViewIsEnabled 包含一个自述文件。
【问题讨论】:
-
当我单击其中一个按钮时,我尝试在开始时调用 Freeze() 方法,然后执行异步操作。之后,我调用了 Unfreeze(),然而,你提到的意外行为并没有发生。所以我无法重现这个问题,您能否提供一个可以重现的简单示例供我们测试?
-
嗨,我在这里放了一个示例应用程序:antamista.visualstudio.com/_git/… 包含自述文件。