我们设置NavigationView的SelectionChanged事件以运行一些条件检查。
private void ApplicationNavigationView_SelectionChanged(NavigationView sender, NavigationViewSelectionChangedEventArgs args)
{
}
我们只允许用户在满足条件时从页面A导航到页面B.
问题是即使我们可以停止从 Page A 导航到Page B ,NavigationView
的选择指标始终会从{{1}更改用户点击/点按时A(页面A)到NavigationViewItem
B(页面B)。这是误导性的,因为选择指示符显示选择了NavigationViewItem
B,而页面仍然是页面A.
有没有办法取消SelectionChanged事件并停止选择指标更改?
尝试使用以下代码但未成功
NavigationViewItem
NavigationViewItem.Tag包含目标页面。当它为非null时,我们导航到目标页面,并缓存当前的NavigationViewItem。如果它为null,我们将先前缓存的NavigationViewItem设置为NavigationView.SelectedItem。我们希望这会将SelectionIndicator恢复到缓存的NavigationViewItem,但它没有。 SelectionIndicator仍然更改为单击的NavigationViewItem。这有什么不对吗?
答案 0 :(得分:0)
我认为使用other()
属性隐藏已禁用的NavigationViewItems
或使用Visibility
属性来禁用它们是合适的。当您描述的条件主动更改时,您可以更新属性,以便用户无法单击选择该项。
否则您无法取消IsEnabled
事件,您唯一可以做的就是将SelectionChanged
设置为NavigationView.SelectedItem
或另一项。
答案 1 :(得分:0)
最好的方法是设置.IsHitTestVisible或.IsEnabled以使该项目不可单击。 根据您的情况,您可以重新设计NavigationViewItem并自己控制选择指示器。我不建议这样做,因为它仅适用于高级用户,也不保证它将在将来的Windows版本中运行。
<Style TargetType="NavigationViewItem">
。您的目录可能看起来有所不同,具体取决于您的SDK版本和VS安装位置。
“ C:\ Program Files(x86)\ Windows Kits \ 10 \ DesignTime \ CommonConfiguration \ Neutral \ UAP \ 10.0.16299.0 \ Generic \ generic.xaml” 将样式复制到页面和app.xaml中,然后删除,重命名或修改SelectionIndicator(例如:Visibility =“ Collapsed”)。
<Grid
HorizontalAlignment="Left"
VerticalAlignment="Center">
<Rectangle
x:Name="SelectionIndicator"
Width="6"
Height="24"
Fill="{ThemeResource NavigationViewSelectionIndicatorForeground}"
Opacity="0.0"/>
</Grid>
注意:
如果您使用的是Windows Insider OS,并且使用的是10.0.17763.0之类的新SDK,则可能会看到SelectionIndicator不在<Style TargetType="NavigationViewItem">
中。
您可以从10.0.16299.0复制样式,它仍然可以使用。