UWP:将按钮设置为 IsEnabled = false 会触发 NavigationView 中的选项卡更改

UWP: Settings buttons to IsEnabled = false triggers a tab-change in the NavigationView

我的主页上有一个带有 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。我在事件回调的开头调用 Freeze 方法,最后调用 Unfreeze。

奇怪和意外的行为是,当我单击 3 个按钮中的任何一个时,现在冻结方法可用,我的 NavigationView 导航到第一页。我不知道为什么。

我测试了什么。

  1. 评论冻结中的所有内容:
private void Freeze()
{
    //lightButton.IsEnabled = false;
    //resetButton.IsEnabled = false;
    //countButton.IsEnabled = false;
}

然后它按预期再次运行,没有导航到第一页

  1. 在冻结中设置启用所有按钮
private void Freeze()
{
    lightButton.IsEnabled = true;
    resetButton.IsEnabled = true;
    countButton.IsEnabled = true;
}

这当然没有意义,但一切都按预期再次运行 - 没有导航。

  1. 仅禁用 1 个按钮
private void Freeze()
{
    lightButton.IsEnabled = false;
    //resetButton.IsEnabled = false;
    //countButton.IsEnabled = false;
}

一切正常。

  1. 扔掉 bin/ 和 obj/ 文件夹

问题依然存在。所以它必须是我的代码中的错误。 我不知道我应该去哪里找。有人知道我遗漏了什么吗?

编辑:重现该问题的完整应用程序位于此处:https://antamista.visualstudio.com/_git/TestAlbumControl?path=%2FTestAlbumControl%2FNavigationViewIsEnabled 包含自述文件。

根据您的示例,我注意到您使用了 SelectionFollowsFocus 属性。当您将 NavigationView.SelectionFollowsFocus 设置为“已启用”时,您的 NavigationView 的项目选择将随着键盘焦点的变化而变化。这意味着当您将第二页中的三个按钮的 IsEnabled 设置为“false”时,它们将不会获得键盘焦点,因此 NavigationView 将始终导航到第一页。

您可以删除语句 SelectionFollowsFocus="Enabled" 或将 SelectionFollowsFocus 属性 设置为“Disabled”。如果您仍想启用 SelectionFollowsFocus,您可以在第二页添加另一个可聚焦的控件(例如 TextBox)。在这种情况下,当您禁用这三个按钮时,它不会导航到第一页。