当我们点击一个按钮执行放大 时,因为放大的数据可能很大,需要一定的等待时间,这个时候为了更好的体验,我们需要加一个ProgressRing,界面布局如下
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<Popup Name="popup" Visibility="Visible" IsOpen="False">
<Grid Width="{Binding ElementName=pageRoot,Path=ActualWidth}" Height="{Binding ElementName=pageRoot,Path=ActualHeight}" Background="#89000000">
<ProgressRing Visibility="Visible" Width="400" Height="400" Name="ring" IsActive="False" FontFamily="Global User Interface"></ProgressRing>
</Grid>
</Popup>
<ScrollViewer ZoomMode="Enabled" ZoomSnapPointsType="None" MaxWidth="2000">
<Grid Name="grid" Background="White">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
</Grid>
</ScrollViewer>
</Grid>
<Page.BottomAppBar>
<AppBar>
<StackPanel>
<Button x:Name="largeButton" Style="{StaticResource ZoomInAppBarButtonStyle}" AutomationProperties.Name="放大" Click="largeButton_Click" />
</StackPanel>
</AppBar>
</Page.BottomAppBar>
后台初始化界面
private void initButton()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 14; j++)
{
Button btn = new Button();
btn.Width = 60;
btn.Height = 60;
btn.BorderThickness = new Thickness(2);
btn.BorderBrush = new SolidColorBrush(Colors.Black);
btn.Foreground = new SolidColorBrush(Colors.Black);
btn.Content = i.ToString() + "," + j.ToString();
Grid.SetRow(btn, i);
Grid.SetColumn(btn, j);
this.grid.Children.Add(btn);
}
}
}
就是简单的在前台加入一些按钮,执行对这些按钮的放大。
private void largeButton_Click(object sender, RoutedEventArgs e)
{
//showLoading();
var task = Task.Factory.StartNew(() => showLoading());
//Task task = new Task(() => longTime());
//task.Start();
longTime();//如果没有多任务,直接执行这个函数,是不行的,前台线程会阻塞
task.Wait();
closeLoading();
}
/// <summary>
/// 显示加载
/// </summary>
private void showLoading()
{
this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
this.popup.IsOpen = true;
this.ring.IsActive = true;
});
}
/// <summary>
/// 关闭加载
/// </summary>
private void closeLoading()
{
this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
this.popup.IsOpen = false;
this.ring.IsActive = false;
});
}
/// <summary>
/// 耗时间的操作
/// </summary>
private void longTime()
{
this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
for (int i = 0; i < 100; i++)
{
foreach (Button btn in this.grid.Children)//耗时间的操作
{
btn.Width += 10;
btn.Height += 6;
}
}
});
}