0

我的 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 导航到第一页。我不知道为什么。

我测试的。

  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 包含自述文件。

4

1 回答 1

1

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

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

于 2020-09-09T09:16:33.920 回答