问题描述
我的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导航到第一页。我不知道为什么。
我测试过的东西。
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 包含自述文件。
解决方法
根据您的样本,我注意到您使用了SelectionFollowsFocus属性。将NavigationView.SelectionFollowsFocus
设置为“启用”时,键盘焦点改变时,NavigationView的项目选择也会改变。这意味着当您在第二页中将三个按钮的IsEnabled设置为“ false”时,它们将不会收到键盘焦点,因此NavigationView将始终导航到第一页。
您可以删除语句SelectionFollowsFocus="Enabled"
或将SelectionFollowsFocus属性设置为“ 已禁用”。如果仍要启用SelectionFollowsFocus,则可以在第二页中添加另一个可聚焦的控件(例如 TextBox )。在这种情况下,禁用三个按钮后,它将不会导航到第一页。