ExpanderView 的性能在展开时很糟糕 (XAML + UWP)

Performance of ExpanderView is bad on expanding (XAML + UWP)

我正在构建一个 UWP 应用程序,它使用 WPF ExpanderView 的移植版本 (ExpanderRT on Codeplex),我使用 ListBox 来显示多个 ExpanderViews,具体取决于我的 ViewModel 中的数据。我在扩展包含多个项目的 ExpanderView 时遇到了性能问题。正如您在 GIF 中看到的那样,第一个 parent 展开非常缓慢,需要一些时间才能显示所有 child 项。如果 parent 没有那么多 child 动画会很流畅。

有没有人使用过这个控件,可以帮助我加快扩展速度?

这是我的XAML代码:

        <Grid>
    <ListBox Name="listbox">
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            </Style>
        </ListBox.ItemContainerStyle>
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemTemplate>
            <DataTemplate x:DataType="models:Parent">
                <controls:ExpanderControl
                    ItemsSource="{x:Bind Childs}"
                    HeaderTemplate="{StaticResource CustomHeaderTemplate}" 
                    ExpanderTemplate="{StaticResource CustomExpanderTemplate}"
                    ItemTemplate="{StaticResource CustomItemTemplate}"
                    NonExpandableHeaderTemplate="{StaticResource CustomNonExpandableHeaderTemplate}" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

此代码来自模型

public class Category
{
    public string Name{ get; set; }
    public List<Subcategory> Childs{ get; set; }
}

Justin XL 为我指明了正确的方向! 此行为是由 ExpanderView 的动画引起的。

在classExpanderControl.cs中有这些属性来控制折叠和展开过程的动画。

    private const int KeyTimeStep = 35;
    private const int InitialKeyTime = 225;
    private const int FinalKeyTime = 250;

减小 KeyTimeStep 的值会导致更快的展开和折叠动画。

谢谢!