Производительность ExpanderView плохая при расширении (XAML + UWP)

Я создаю приложение UWP, в котором используется портированная версия ExpanderView WPF (ExpanderRT в Codeplex) , я использую ListBox для отображения нескольких ExpanderView в зависимости от моих данных из моей ViewModel. Я столкнулся с проблемой производительности при расширении ExpanderView со многими элементами. Как вы можете видеть в GIF, первый родитель расширяется очень медленно, и требуется некоторое время, чтобы отобразить все дочерние элементы. Если у родителя не так много дочерних элементов, анимация будет довольно гладкой.

Кто-нибудь имеет опыт работы с этим элементом управления и может помочь мне ускорить расширение?

Это мой код 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; }
}

Медленно расширяется


person nor0x    schedule 10.09.2015    source источник
comment
Это НЕ проблема производительности... И мне кажется, что это достаточно гладко. Анимация просто имеет каскадный эффект, который анимирует элементы один за другим с небольшой задержкой. Если вы не хотите такого поведения, вам нужно найти код анимации и изменить его.   -  person Justin XL    schedule 10.09.2015


Ответы (1)


Джастин XL указал мне правильное направление! Это поведение вызвано анимацией ExpanderView.

В классе ExpanderControl.cs есть эти свойства для управления анимацией процесса свертывания и расширения.

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

Уменьшение значения KeyTimeStep приводит к более быстрому расширению и сворачиванию анимации.

Спасибо!

person nor0x    schedule 16.09.2015
comment
Привет @JustinXL, я попробовал это в UWP Win-10 (универсальное приложение), но не сработало ... не могли бы вы мне помочь. Мне нужно точное управление с точным видом и анимацией, пожалуйста. - person Zia Ur Rahman; 24.02.2016
comment
@ZiaUrRahman Я создал версию элемента управления, оптимизированную для UWP. Вы можете найти его на GitHub github.com/nor0x/UWP_Expander. - person nor0x; 25.02.2016