ExpanderView 在页面导航后展开

ExpanderView is expanded after page navigation

我在我的 UWP 应用程序中使用 WPF ExpanderView (ExpanderRT) 的一个端口来显示带有项目的可扩展 headers。当应用程序首次启动并且 MainPage 已初始化时,这可以正常工作。但是,如果我导航到一个新页面,然后返回到 MainPageExpanderView 看起来像展开了,但它没有显示项目。它看起来应该与首次初始化 MainPage 时一样。我捕获了一个 GIF 来显示行为。

这是 MainPageUserControlXAML

<ListView x:Name="CategoriesListView" ScrollViewer.VerticalScrollBarVisibility="Hidden">
<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListViewItem">
                    <ListViewItemPresenter ContentMargin="0" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ListView.ItemContainerStyle>
<ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <StackPanel/>
    </ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
    <DataTemplate x:DataType="models:Category">
        <expander:ExpanderControl
            x:Name="expander_Main"
            ItemsSource="{x:Bind childItems}"
            Expanded="Expanded" />
    </DataTemplate>
</ListView.ItemTemplate>

这是我用来导航的EventHandler

    private void OnSettingsButtonChecked(object sender, RoutedEventArgs e)
    {
        ShellSplitView.IsPaneOpen = false;
        ViewModel.NavigationService.Navigate(typeof(SettingsPage));
    }

如果你们中有人知道为什么 ExpanderView 有如此奇怪的行为,请给我提示 - 如果您需要,我可以提供更多我的代码。

[更新]

我注意到只有当我在移动设备(智能手机或移动 Windows 10 模拟器)上 运行 应用程序时才会出现此行为。如果我在本地机器上执行应用程序,ExpanderView 工作正常。当我使用后退按钮导航回 MainPage 时,它按预期工作 - 我不知道如何解决这个问题,这真的很奇怪。

在调试 ExpanderRT 控件的全部代码后,我能够解决问题!这是由移植到 WinRT

的原始 Expander 控件的错误引起的

我发现,class ExpanderControl.cs_itemsCanvas 的高度是通过以下方法设置的:

private void OnPresenterSizeChanged(object sender, SizeChangedEventArgs e)
{
    if (null != _itemsCanvas && null != _presenter && IsExpanded)
    {
        _itemsCanvas.Height = _presenter.DesiredSize.Height;
    }
}

这导致项目容器的大小仅在 ExpanderView 当前展开时应用。当ExpanderView当前未展开时,我只是添加了以下条件以将项目容器的高度设置为0。

else if (null != _itemsCanvas && null != _presenter && !IsExpanded)
{
   _itemsCanvas.Height = 0;
}

我对控件进行了各种改进以利用新的 UWP 功能,因此如果有人对 UWP 兼容版本感兴趣,请随时与我联系。

更新

我为 UWP 的更新 ExpanderControl 创建了一个 GitHub Repo