Магазин Windows 8.1. XAML Progress Bar между страницами

1

У меня возникла проблема со страницей моего приложения для хранения Windows 8.1, которое занимает много времени для рендеринга - это сетка с несколькими столбцами и строками, которая привязана к данным при загрузке страницы. Это не загрузка медленных данных, а фактическое связывание данных с сеткой.

Я в идеале хочу отобразить диалоговую панель, чтобы указать пользователю, что что-то загружается, и они нажали на предыдущую навигационную кнопку в порядке.

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

т.е. кнопка кликов пользователя, которая вызывает

this.Frame.Navigate(typeof(LoadingPage));

На странице загрузки отображается индикатор выполнения

Я знаю, что нужно иметь возможность звонить

this.Frame.Navigate(typeof(ActualPage));

Пользователь видит индикатор выполнения, пока загружается ActualPage.

Любые предложения были бы очень благодарны спасибо!

  • 0
    Рассматриваете ли вы использовать gridview? Зависит от вашей модели данных, но gridview имеет встроенную тактику виртуализации пользовательского интерфейса для постепенной загрузки объектов.
Теги:
xaml
windows-store-apps
windows-8.1

2 ответа

1
Лучший ответ

Благодаря команде поддержки в DEVExpress у меня есть решение моей проблемы.

Во-первых, на странице, которая требует времени для загрузки, я завернул свою Grid в ContentControl

<ContentControl Visibility="Collapsed" Name="Content">
    <!-- Grid in here -->
</ContentControl>

Затем я добавил TextBlock, который я буду использовать для отображения "Загрузка..." на мою страницу. Я назвал этот контрольный индикатор.

<TextBlock x:Name="indicator" Text="Loading..." />

Я приложил следующий метод к событию Loaded страницы, которая использует таймер

void MainPage_Loaded(object sender, RoutedEventArgs e)
{

    indicator.Visibility = Windows.UI.Xaml.Visibility.Visible;
    DispatcherTimer t = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1) };
    t.Tick += (dd, ee) =>
    {
        t.Stop();
        Content.Visibility = Windows.UI.Xaml.Visibility.Visible;
    };
    t.Start();
}

Затем, когда gridcontrol имеет Loaded, я скрываю индикатор TextBlock

void gridControl_Loaded(object sender, RoutedEventArgs e)
{
    indicator.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
}

Это отлично работает для меня. Я не могу использовать элемент управления Windows 8 ProgressBar, потому что анимация загружается в тот же поток, который загружает сетку, но я достаточно счастлив, чтобы иметь какой-либо индикатор.

Также благодарит Брайана Стомпа за то, что он указал мне в правильном направлении.

0

Во-первых, я предлагаю использовать ListView или GridView для отображения ваших объектов привязки данных из-за встроенной виртуализации пользовательского интерфейса.

Однако, возможно, это сработает для вашей ситуации.

Знаете ли вы, когда ваша страница готова к отображению? Если это так, поместите кольцо прогресса перед сеткой, пока оно загружается в фоновом режиме.

<Grid x:Name="FullPageGrid">
        <Grid x:Name="YourGridContent">

        </Grid>
        <Grid Background="White" Visibility="Visible" x:Name="ProgressRingGrid">
            <ProgressRing IsActive="True"></ProgressRing>
        </Grid>
</Grid>

Когда данные будут полностью загружены, измените видимость "ProgressRingGrid" на Visibility = "Collapsed"

  • 0
    Спасибо за предложения - к сожалению, это сторонний элемент управления сеткой, поэтому я не могу воспользоваться опциями виртуализации. Я связался с третьей стороной, чтобы узнать, есть ли у них какие-либо предложения.
  • 0
    Также, насколько я знаю, я не думаю, что у меня есть какой-либо способ узнать, что страница закончила загрузку - было бы идеально, если бы было какое-то событие, которое могло бы сработать, как только все загрузится. Затем я бы установил для параметра Видимость сетки значение Свернуть, чтобы позволить загрузке страницы, и пользователь увидит, что они переместились, а затем после этого изменит видимость сетки. Я играю с идеей даже делать это по таймеру.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню