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

问题描述

我的MainPage上有一个带有WinUI2.4 NavigationView的UWP应用。 在导航视图的框架中放置了三个页面。 第二个标签导航到带有3个带有Click事件的按钮的页面

<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"/>

他们执行异步操作。一切正常。 除了现在,我想在单击一个按钮时一起禁用这三个按钮。仅当异步操作完成时,才应重新启用它们。

我在第二页上写了一个方法

private void Freeze()
{
    lightButton.IsEnabled = false;
    resetButton.IsEnabled = false;
    countButton.IsEnabled = false;
}

以及随附的取消冻结方法,该方法应将所有内容再次设置为true。我在事件回调的开头调用Freeze方法,而在结束时调用Unfreeze。

奇怪和意外的行为是,当我单击三个按钮中的任何一个时,现在都可以使用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 包含自述文件

解决方法

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...