首页 > 解决方案 > NavigationView 中的 UWP ListView,仅呈现第一个子项

问题描述

我想要一个 NavigationView ,其中包含一些比常见的稍微复杂一些的元素NavigationViewItem。更具体地说,我的目标是ListView在 my 中间的某个地方NavigationView,就在该NavigationView.MenuItems部分之后。但是由于某些原因,当我尝试使用 a ListView(or StackPanel) 时,只会渲染第一个孩子。

一些 XAML 重现此问题:

<NavigationView x:Name="mainNavigation" PaneDisplayMode="Left" ItemInvoked="OnNavigationViewItemInvoked" Loaded="OnNavigationViewLoaded">
    <NavigationView.MenuItems>
        <NavigationViewItemHeader Content="Favorites" />
        <NavigationViewItem Content="Space 1" />
        <NavigationViewItem Content="Space 2" />
        <NavigationViewItemSeparator Margin="0,0,0,20" />

        <NavigationViewItem>
            <AutoSuggestBox QueryIcon="Find" PlaceholderText="Search for a space" Width="288" />
        </NavigationViewItem>
        <NavigationViewItem>
            <ListView>
                <ListViewItem>
                    <TextBlock Text="Test1" />
                </ListViewItem>
                <ListViewItem>
                    <TextBlock Text="Test2" />
                </ListViewItem>
                <ListViewItem>
                    <TextBlock Text="Test3" />
                </ListViewItem>
            </ListView>
        </NavigationViewItem>
    </NavigationView.MenuItems>

    <Frame x:Name="rootFrame" />
</NavigationView>

哪个渲染到:

在此处输入图像描述

正如您在此屏幕截图中看到的那样,只有第一个孩子(“Test1”)可见,“Test2”和“Test3”由于我不明白的原因没有呈现。

标签: windowsxamluwpuwp-xaml

解决方案


默认情况下,ListViewItem是固定高度。您可以通过更新 XAML 中的内联模板来更改此设置:

<NavigationViewItem>
  <NavigationViewItem.Template>
    <ControlTemplate>
      <Border Height="auto">
        <ContentPresenter/>
      </Border>
    </ControlTemplate>
  </NavigationViewItem.Template>
  <ListView>
    <!-- your items -->
  </ListView>
</NavigationViewItem>

推荐阅读