NavigationView - 当选择设置项时,无法从代码中取消选择它

时间:2018-03-02 23:44:09

标签: c# uwp

我发现了一些奇怪的行为。如果SelectedItem是SettingsItem,则无法从代码中取消选择

XAML:

<NavigationView Name="nv">
    <NavigationView.MenuItems>
        <NavigationViewItem Content="dsadas" />
        <NavigationViewItem Content="dsadas" />
        <NavigationViewItem Content="dsadas" />
        <NavigationViewItem Content="dsadas" />
    </NavigationView.MenuItems>
    <Button Click="Button_Click" Content="de select" />
</NavigationView>

CS:

private void Button_Click(object sender, RoutedEventArgs e)
{
    nv.SelectedItem = null;
}

就是这样。我不明白为什么代码不能用于设置项目以及如何处理这个问题。

3 个答案:

答案 0 :(得分:2)

延长@ Martin-Zikmund的答案。如果设置了ItemsSource,则现在处理代码。

which -a python

这完全适合我

答案 1 :(得分:0)

这是NavigationView中非常有趣的错误,我创建了一个GitHub repro并通过Feedback Hub进行了报告。

作为一种解决方法,我创建了以下内容&#34; hack&#34;扩展方法:

public static class NavigationViewExtensions
{
    public static void ClearSelection(this NavigationView navigationView)
    {
        var temporaryItem = new NavigationViewItem();
        navigationView.MenuItems.Add(temporaryItem);
        navigationView.SelectedItem = temporaryItem;
        navigationView.SelectedItem = null;
        navigationView.MenuItems.Remove(temporaryItem);
    }
}

它是如何工作的?代码会临时向控件添加一个新NavigationViewItem并选择它(从而取消选择“设置”项)。然后它清除选择并立即删除临时项目。由于视图在UI线程上更新,因此您将永远无法注意到新项目的添加和删除。

答案 2 :(得分:0)

我找到了另一种解决方法。

您需要将隐藏的项目添加到NavigationView:

<NavigationView Name="nv">
  <NavigationView.MenuItems>
    <NavigationViewItem Content="dsadas" />
    <NavigationViewItem Content="dsadas" />
    <NavigationViewItem Content="dsadas" />
    <NavigationViewItem Content="dsadas" />
    <NavigationViewItem x:Name="HiddenItem" Visibility="Collapsed" />
  </NavigationView.MenuItems>
<Button Click="Button_Click" Content="de select" />

然后您可以清除选择:

nv.SelectedItem = HiddenItem;