编程语言
首页 > 编程语言> > c# – ExpanderView在页面导航后展开

c# – ExpanderView在页面导航后展开

作者:互联网

我在我的UWP应用程序中使用WPF ExpanderView(ExpanderRT)的端口来显示带有项目的可扩展标头.当第一次启动应用程序并初始化MainPage时,此工作正常.但是,如果我导航到新页面然后返回到MainPage,ExpanderView看起来像是扩展的,但不是它没有显示项目.它应该与MainPage首次初始化时的外观相同.我抓住了一个GIF来展示这种行为.

这是MainPage上UserControl的XAML;

<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有这么奇怪的行为,请给我一个提示 – 如果你需要,我可以提供更多的代码.

Capture

[UPDATE]

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

Capture on Desktop

解决方法:

在调试ExpanderRT控件的整个代码后,我能够解决问题!它是由原始Expander控件的一个错误导致的,它被移植到WinRT

我发现,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兼容版本感兴趣,请随时与我联系.

UPDATE

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

标签:c,wpf,xaml,uwp,windows-10-mobile
来源: https://codeday.me/bug/20190628/1315067.html