У меня возникла проблема со страницей моего приложения для хранения Windows 8.1, которое занимает много времени для рендеринга - это сетка с несколькими столбцами и строками, которая привязана к данным при загрузке страницы. Это не загрузка медленных данных, а фактическое связывание данных с сеткой.
Я в идеале хочу отобразить диалоговую панель, чтобы указать пользователю, что что-то загружается, и они нажали на предыдущую навигационную кнопку в порядке.
Я видел, как кто-то упоминал о возможности наличия "загрузочной страницы", в которой есть только индикатор выполнения, и я подумал, что это решение может работать, но я не могу решить, в каком случае страницы загрузки я должен перейти к фактической странице,
т.е. кнопка кликов пользователя, которая вызывает
this.Frame.Navigate(typeof(LoadingPage));
На странице загрузки отображается индикатор выполнения
Я знаю, что нужно иметь возможность звонить
this.Frame.Navigate(typeof(ActualPage));
Пользователь видит индикатор выполнения, пока загружается ActualPage.
Любые предложения были бы очень благодарны спасибо!
Благодаря команде поддержки в 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, потому что анимация загружается в тот же поток, который загружает сетку, но я достаточно счастлив, чтобы иметь какой-либо индикатор.
Также благодарит Брайана Стомпа за то, что он указал мне в правильном направлении.
Во-первых, я предлагаю использовать 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"