03.進捗状況の表示方法を設定する
進捗状況の表示方法は2つあります。
1つは左から右に向かって緑で塗りつぶしていくパターン、もう1つは緑のマーカーが左から右へ向かって流れる動作を繰り替えし行うパターンです。
この表示方法を設定するには IsIndeterminateプロパティを使用し、「緑のマーカーが左から右へ向かって流れる動作を繰り替えし行うパターン」の場合はTrueを設定します(既定値はFalseです)。
下記は、IsIndeterminate プロパティを使用して表示方法を設定する例です。
<Window.Triggers> <!-- WindowがロードされたらProgressBar1を進捗させる --> <EventTrigger RoutedEvent="Window.Loaded"> <BeginStoryboard> <Storyboard TargetName="ProgressBar1" TargetProperty="Value"> <DoubleAnimation From="0" To="100" Duration="0:0:20" /> </Storyboard> </BeginStoryboard> </EventTrigger> </Window.Triggers> <StackPanel> <TextBlock Text="IsIndeterminate = False" Margin="5"/> <!-- IsIndeterminate = False --> <ProgressBar Name="ProgressBar1" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="5,0,0,0" Height="16" Width="254" Minimum="0" Maximum="100" Value="0" IsIndeterminate="False"/> <TextBlock Text="IsIndeterminate = True" Margin="5"/> <!-- IsIndeterminate = True --> <ProgressBar Name="ProgressBar2" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="5,0,0,0" Height="16" Width="254" Minimum="0" Maximum="100" Value="0" IsIndeterminate="True"/> </StackPanel>
Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded '進捗状況の表示方法を設定する ProgressBar1.IsIndeterminate = False ProgressBar2.IsIndeterminate = True End Sub
private void Window_Loaded(object sender, RoutedEventArgs e) { // 進捗状況の表示方法を設定する progressBar1.IsIndeterminate = false; progressBar2.IsIndeterminate = true; }
進捗状況の表示方法を変更するにはIsIndeterminateプロパティを使用する。
04.プログレスバー上に進捗率を表示する
ProgressBar コントロールには進捗率を表示させるためのプロパティがありません。
そこでGridを1つ準備して、 ProgressBarコントロールとTextBlockコントロールを重ねて置くことで、あたかもProgressBarコントロールにテキスト表示エリアがあるかのように見せることができます。
このとき TextBlockコントロールをViewBoxに配置すると、Gridのサイズに合わせてフォントのサイズが自動で変わるようになります。
下記はProgressBarにテキスト表示エリアを作成し、進捗率を表示する例です。
VB.NETまたはC#のコードは、「02.進捗状況値の取得/設定をする」を参考にし、Worker_ProgressChangedメソッドのみ下記に示すように変更してください。
<!-- テキスト表示エリアを持ったProgressBar --> <Grid Margin="12,12,0,0" HorizontalAlignment="Left" Width="249" Height="34" VerticalAlignment="Top"> <ProgressBar Name="ProgressBar1" Minimum="0" Maximum="100" Value="0" /> <Viewbox> <TextBlock Name="TextBlock1" Text="0%" TextAlignment="Center"/> </Viewbox> </Grid> <Button Content="START" Height="23" HorizontalAlignment="Left" Margin="12,56,0,0" Name="btnStart" VerticalAlignment="Top" Width="75" /> <Button Content="STOP" Height="23" HorizontalAlignment="Right" Margin="0,56,106,0" Name="btnStop" VerticalAlignment="Top" Width="75" />
' 現在値の更新 Private Sub Worker_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles Worker.ProgressChanged 'プログレスバーの現在値を更新する ProgressBar1.Value = e.ProgressPercentage '進捗率を表示する TextBlock1.Text = ProgressBar1.Value.ToString() & "%" End Sub
// 現在値の更新 void Worker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e) { // プログレスバーの現在値を更新する progressBar1.Value = e.ProgressPercentage; // 進捗率を表示する textBlock1.Text = progressBar1.Value.ToString() + "%"; }
ProgressBar上にTextBlockコントロールを重ねることで、擬似的にテキスト表示エリアを作成する。