ExpanderView расширяется после перехода по странице

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

Это XAML из UserControl на MainPage;

<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>

This is the EventHandler which I use for navigation;

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

Если кто-нибудь из вас знает, почему ExpanderView ведет себя так странно, дайте мне подсказку - я могу предоставить больше моего кода, если вам нужно.

Захват

[ОБНОВЛЕНИЕ]

Я заметил, что такое поведение происходит только тогда, когда я запускаю приложение на мобильном устройстве (смартфоне или мобильном эмуляторе Windows 10). Если я запускаю приложение на локальном компьютере, ExpanderView работает нормально. Когда я использую кнопку «Назад» для перехода к MainPage, она работает, как и ожидалось — я понятия не имею, как это исправить, это действительно странно.

Захват на рабочем столе


person nor0x    schedule 16.09.2015    source источник


Ответы (1)


После отладки всего кода элемента управления ExpanderRT я смог решить проблему! Это вызвано ошибкой оригинального элемента управления Expander, который был портирован на WinRT.

Я узнал, что высота _itemsCanvas в классе ExpanderControl.cs устанавливается с помощью этого метода:

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

Это приводит к тому, что размер контейнера элемента применяется только тогда, когда ExpanderView в данный момент развернут. Я просто добавил следующее условие, чтобы установить высоту контейнера элемента на 0, когда ExpanderView в настоящее время не развернут.

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

Я добавил различные улучшения в элемент управления, чтобы воспользоваться новыми возможностями UWP, поэтому, если кто-то заинтересован в версии, совместимой с UWP, не стесняйтесь обращаться ко мне.

ОБНОВЛЕНИЕ

Я создал репозиторий GitHub для обновленного ExpanderControl для UWP.

person nor0x    schedule 05.10.2015