web-dev-qa-db-ja.com

WPFプログレスバーでIndeterminate = "True"の場合、どのように進行状況を表示しますか?

これはすべての質問の中で最も単純でなければなりませんが、私はそれを理解できないようです。プログレスバーを配置していますが、進行状況を表示するにはどうすればよいですか。どうすれば始められますか?

<ProgressBar x:Name="ProgressUpload" Margin="5" IsIndeterminate="True" ></ProgressBar>
13
user38349

IsIndeterminateをTrueに設定すると、進行状況は何かが進行中であることを意味しますが、正確な期間を決定することはできません。したがって、falseに設定し、プログレスバーを「標準」の動作で使用するように指示することしかできません。

23

プログレスバーを開始しようとしているが、不確定なバーとして、準備ができたらプロパティIsIndeterminateをtrueに設定し、終了したらfalseに設定する必要があります。

つまり、次のようになります。

pbar.IsIndeterminate = true; //This starts your bar's animation
pbar.IsIndeterminate = false; //This stops your bar's animation

なぜこのようにしたいのかについてのコンテキストを与えるために、次の擬似コードを見てください。

//Some method that is going to start something that is going to take a while
public void StartLongRunningProcess()
{
    //Make a call to a web service asynchronously etc...

    //Start the animation for your progress bar
    pbar.IsIndeterminate = true;
}

//The method (delegate) that handles the result, usually from an event.
//This method will handle the result of the asynchronous call 
public void HandlerForLongRunningProcess()
{
    //Do stuff with result from your asynchronous web service call etc...

    //Stop the animation for your progress bar
    pbar.IsIndeterminate = false;
}

これがこのプロパティの使用目的であるかどうかはわかりませんが、間違いなく機能していると言えます。

16
dyslexicanaboko

どうやら一部の環境では、不確定なアニメーションを実行するために高さを明示的に設定する必要がありますが、他の環境では必要ありません。

1
jmalmari

これは上記の@dyslexicanabokoと実際の違いはありませんが、制御できるデモンストレーションをすばやく簡単に行うことができます。

XAMLの場合:

<Button Content="Start Process" HorizontalAlignment="Center" Click="StartAProcess"/>
<Button Content="Stop Process" HorizontalAlignment="Center" Click="StopAProcess"/>
<ProgressBar Name="pBar1" Height="20"/>

コードビハインド:

Public Sub StartAProcess()
  pBar1.IsIndeterminate = True
End Sub

Public Sub StopAProcess()
  pBar1.IsIndeterminate = False
End Sub

[プロセスの開始]ボタンをクリックすると、アニメーションが開始され、[プロセスの停止]ボタンがクリックされるまで続行されます。明らかなはずですが、IsIndeterminateオプションは適切なUIプラクティスではありません。実際に値を更新する方が良いですが、これが実際に動作するのを見たい人には...

0
Alan

それを所有するウィンドウの初期化(つまり、XAMLのUIデザイナー、またはコード側のコンストラクター)中にIsIndeterminateに設定しないでください。そうすると、アニメーションは開始されません。 'Loaded'イベントハンドラー内で設定します。

してただろう IsIndeterminate = 'False' XAML側で、次にWindow_Loadedイベント、設定:

myProgressBar.IsIndeterminate = true;
0
Greg

この問題の考えられる回避策は、ProgressBarコントロールを表示または非表示にすることです。

progressBar.Visibility = Visibility.Visible;

progressBar.Visibility = Visibility.Collapsed;
0
Stefan

また、CacheMode = "BitmapCache"がページに設定されていないことを確認してください。設定されていない場合、アニメーションは実行されません。キャッシュされたビットマップを表示するだけです...

0
Jon9865