ProgressBar
从XAML文件中可以看出,一组BadioButton按钮,用来变化ProgressBar的样式。ProgressBar是包含在StatusBar中的。
XAML文件:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Margin="10,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Grid.Column="0" Grid.Row="0" FontSize="20">Progress Bars</TextBlock>
<StackPanel Grid.Column="0" Margin="10,30.6,-10,0" VerticalAlignment="Top" Height="124.8">
<Label>Choose number of ProgressBar iterations.</Label>
<RadioButton Content="One" Click="MakeOne"/>
<RadioButton Content="Three" Click="MakeThree"/>
<RadioButton Content="Five" Click="MakeFive"/>
<RadioButton Content="Forever" Click="MakeForever"/>
<RadioButton Content="Indeterminate" Click="MakeIndeterminate"/>
</StackPanel>
<StatusBar Name="sbar" Grid.Column="0" Background="Beige" Margin="8,171.04,-8,177" >
<StatusBarItem>
<TextBlock Width="110.657" Height="22.96">StatusBar</TextBlock>
</StatusBarItem>
</StatusBar>
</Grid>
下面来一个一个分析,首先sbar.Items.Clear();来清空“sbar”中的所有子项,下来新建一个Label,并设置它的颜色和设置的内容,并把它添加到“sbar”中。ProgressBar progbar = new ProgressBar();动态创建一个进度条。 progbar.IsIndeterminate是来设置进度条是从头到尾进行,还是一次次滚动,如果为false,则是从头到尾,为true则是一次次循环滚动,默认值为false。Duration duration = new Duration(TimeSpan.FromSeconds(10));进行完一次所需的时间。DoubleAnimation doubleanimation = new DoubleAnimation(100.0, duration);定了进度条的进行到的值。doubleanimation.RepeatBehavior = new RepeatBehavior(3);是进度条重复的次数,默认情况下是一次。RepeatBehavior.Forever ;则是无限时进行。progbar.BeginAnimation(ProgressBar.ValueProperty, doubleanimation);把doubleanimation加载到progbar中。其中在MakeFive过程中,实现了把一个图片处理成ImageBrush的过程。
CS文件:
private void MakeOne(object sender, RoutedEventArgs e)
{
sbar.Items.Clear();
Label lbl = new Label();
lbl.Background = new LinearGradientBrush(Colors.LightBlue, Colors.SlateBlue, 90);
lbl.Content = "ProgressBar with one iteration.";
sbar.Items.Add(lbl);
ProgressBar progbar = new ProgressBar();
progbar.IsIndeterminate = false;
progbar.Orientation = Orientation.Horizontal;
progbar.Width = 150;
progbar.Height = 15;
Duration duration = new Duration(TimeSpan.FromSeconds(10));
DoubleAnimation doubleanimation = new DoubleAnimation(100.0, duration);
progbar.BeginAnimation(ProgressBar.ValueProperty, doubleanimation);
sbar.Items.Add(progbar);
}
private void MakeThree(object sender, RoutedEventArgs e)
{
sbar.Items.Clear();
Label lbl = new Label();
lbl.Background = new LinearGradientBrush(Colors.Pink, Colors.Red, 90);
lbl.Content = "ProgressBar with three iterations.";
sbar.Items.Add(lbl);
ProgressBar progbar = new ProgressBar();
progbar.Background = Brushes.Gray;
progbar.Foreground = Brushes.Red;
progbar.Width = 150;
progbar.Height = 15;
Duration duration = new Duration(TimeSpan.FromMilliseconds(2000));
DoubleAnimation doubleanimation = new DoubleAnimation(100.0, duration);
doubleanimation.RepeatBehavior = new RepeatBehavior(3);
progbar.BeginAnimation(ProgressBar.ValueProperty, doubleanimation);
sbar.Items.Add(progbar);
}
private void MakeFive(object sender, RoutedEventArgs e)
{
sbar.Items.Clear();
TextBlock txtb = new TextBlock();
txtb.Text = "ProgressBar with five iterations.";
sbar.Items.Add(txtb);
Image image = new Image();
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri(@"pack://application:,,,/data/e.jpg");
bi.EndInit();
image.Source = bi;
ImageBrush imagebrush = new ImageBrush(bi);
ProgressBar progbar = new ProgressBar();
progbar.Background = imagebrush;
progbar.Width = 150;
progbar.Height = 15;
Duration duration = new Duration(TimeSpan.FromMilliseconds(2000));
DoubleAnimation doubleanimation = new DoubleAnimation(100.0, duration);
doubleanimation.RepeatBehavior = new RepeatBehavior(5);
progbar.BeginAnimation(ProgressBar.ValueProperty, doubleanimation);
sbar.Items.Add(progbar);
}
private void MakeForever(object sender, RoutedEventArgs e)
{
sbar.Items.Clear();
Label lbl = new Label();
lbl.Background = new LinearGradientBrush(Colors.LightBlue,
Colors.SlateBlue, 90);
lbl.Content = "ProgressBar with infinite iterations.";
sbar.Items.Add(lbl);
ProgressBar progbar = new ProgressBar();
progbar.Width = 150;
progbar.Height = 15;
Duration duration = new Duration(TimeSpan.FromSeconds(1));
DoubleAnimation doubleanimation = new DoubleAnimation(100.0, duration);
doubleanimation.RepeatBehavior = RepeatBehavior.Forever;
progbar.BeginAnimation(ProgressBar.ValueProperty, doubleanimation);
sbar.Items.Add(progbar);
}
private void MakeIndeterminate(object sender, RoutedEventArgs e)
{
sbar.Items.Clear();
Label lbl = new Label();
lbl.Background = new LinearGradientBrush(Colors.Pink, Colors.Red, 90);
lbl.Content = "Indeterminate ProgressBar.";
sbar.Items.Add(lbl);
ProgressBar progbar = new ProgressBar();
progbar.Background = Brushes.Gray;
progbar.Foreground = Brushes.Red;
progbar.Width = 150;
progbar.Height = 15;
progbar.IsIndeterminate = true;
sbar.Items.Add(progbar);
}
效果如下图:
本文参考MSDN组织
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524