【问题标题】:UWP: Settings buttons to IsEnabled = false triggers a tab-change in the NavigationViewUWP:设置按钮 IsEnabled = false 会触发 NavigationView 中的选项卡更改
【发布时间】: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 导航到第一页。我不知道为什么。

我测试了什么。

  1. 在 Freeze 中评论所有内容:
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 包含一个自述文件。

【问题讨论】:

  • 当我单击其中一个按钮时,我尝试在开始时调用 Freeze() 方法,然后执行异步操作。之后,我调用了 Unfreeze(),然而,你提到的意外行为并没有发生。所以我无法重现这个问题,您能否提供一个可以重现的简单示例供我们测试?
  • 嗨,我在这里放了一个示例应用程序:antamista.visualstudio.com/_git/… 包含自述文件。

标签: c# uwp winui


【解决方案1】:

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

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

【讨论】:

  • 很高兴您花时间查看并找到它。它选择将其设置为Disabled,因为我还遇到了SelectionFollowsFocus="Enabled" 的其他问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 2013-03-31
  • 1970-01-01
  • 2020-08-10
相关资源
最近更新 更多