【问题标题】:NavigationView and additional settings buttonNavigationView 和其他设置按钮
【发布时间】:2019-09-10 17:27:13
【问题描述】:

我想在 NavigationView (https://docs.microsoft.com/en-us/windows/uwp/design/controls-and-patterns/navigationview) 中的设置项(按钮)之前添加新项。我不知道如何添加这样的功能

我尝试修改控件样式,但在添加按钮样式后,我没有预期的行为。该元素没有导航。 我想要达到的目标:

【问题讨论】:

  • 嘿,你的问题有点笼统。也许附上一些代码示例,向我们展示您迄今为止所做的尝试。
  • 我添加了一些附加信息。并绘制我想要实现的目标

标签: c# uwp uwp-xaml


【解决方案1】:

您可以使用PaneFooterSettings 按钮上方放置其他内容:

<NavigationView>
    <NavigationView.PaneFooter>
        <StackPanel Orientation="Vertical">
            <NavigationViewItem Icon="SelectAll" Content="Select all" />
            <NavigationViewItem Icon="Help" Content="Help" />
        </StackPanel>
    </NavigationView.PaneFooter>
</NavigationView>

不幸的是,控件不会自动处理该区域中菜单项的选择,因此“选定项突出显示”(左侧的滑动矩形)不会移动到 PaneFooter 中的项目,因为控件“不了解”他们。

【讨论】:

  • 这部分解决了我想要实现的目标。尽管如此,就像你提到的那样,是不可选择的:(
  • @ArturSiwiak 我怀疑如果您需要此功能,您可能必须自定义您自己的导航控件。就像我们之前为 humberger 菜单所做的那样。你的意思是你的设置太多,一页不够?也许您可以直接在设置页面上设置一些导航。
  • 我认为这里的用例是有一个“辅助”导航菜单项区域。例如,许多应用程序使用此区域来显示登录的用户信息。
  • @BarryWang-MSFT:Martin 举了一个很好的例子,说明我为什么需要这样的功能。我不想在主导航列表中添加一些项目,因为需要这些项目始终对用户可见。主菜单中的项目数可以很长(用户决定有多少项目)
【解决方案2】:

将辅助NavigationView 添加到主要NavigationViewPaneFooter 中。然后在Tapped 事件处理程序中手动更新选择。示例代码:

<NavigationView x:Name="MainNavigationView"
                IsBackButtonVisible="Collapsed"
                IsPaneToggleButtonVisible="true"
                OpenPaneLength="220"
                CompactModeThresholdWidth="0"
                ExpandedModeThresholdWidth="0"
                MenuItemsSource="{x:Bind PrimaryButtons}"
                IsSettingsVisible="False"
                IsPaneOpen="true">
    <NavigationView.MenuItemTemplate>
        <DataTemplate x:DataType="local:HamburgerMenuButtonInfo">
            <NavigationViewItem Tapped="MainMenuButton_Tapped">
                <ContentPresenter Content="{x:Bind Content}" />
            </NavigationViewItem>
        </DataTemplate>
    </NavigationView.MenuItemTemplate>

    <NavigationView.PaneFooter>
        <NavigationView x:Name="FooterNavigationView"
                        IsBackButtonVisible="Collapsed"
                        IsPaneToggleButtonVisible="False"
                        OpenPaneLength="220"
                        CompactModeThresholdWidth="0"
                        ExpandedModeThresholdWidth="0"
                        IsSettingsVisible="False"
                        MenuItemsSource="{x:Bind SecondaryButtons}"
                        IsPaneOpen="true">
            <NavigationView.MenuItemTemplate>
                <DataTemplate x:DataType="local:HamburgerMenuButtonInfo">
                    <NavigationViewItem Tapped="FooterMenuButton_Tapped">
                        <ContentPresenter Content="{x:Bind Content}" />
                    </NavigationViewItem>
                </DataTemplate>
            </NavigationView.MenuItemTemplate>
        </NavigationView>
    </NavigationView.PaneFooter>
</NavigationView>

Tapped 事件处理程序中的其他NavigationView 中清除选择:

    private void MainMenuButton_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
    {
        FooterNavigationView.SelectedItem = null;
    }

    private void FooterMenuButton_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
    {
        MainNavigationView.SelectedItem = null;
    }

Tapped 没有为设置项调用事件处理程序。最简单的解决方法是添加您自己的设置菜单项,而不是将 IsSettingsVisible 设置为 true。

【讨论】:

    【解决方案3】:

    我发现了一个有问题的解决方法,它使用了一个

    &lt;NavigationViewItemSeparator Height="{x:Bind Monitor.Spacer, Mode=OneWay}"/&gt; 在您的顶部和底部项目之间,

    每当触发视图的SizeChanged 事件时,绑定变量将更改。具体值取决于您的其他元素。从视图高度减去它们,你就可以开始了。

    我说这是有问题的,因为调整大小时过渡不平滑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 2012-11-20
      • 1970-01-01
      • 2020-06-18
      • 2021-10-17
      • 2015-02-23
      相关资源
      最近更新 更多