1

Value プロパティを持つ WPF の ProgressBar オブジェクトを使用しています。定数の int または 10 進数の値を渡すことができ、問題はありませんが、float (または int または string) の変数値を渡すと、barfs が発生します。"Message='0.02380952' is not a valid value for property 'Value'."私にはArgumentException (eg ) が発生しました。私がフォローしているMSの例では、定数の float 値を使用しています。ただし、Value プロパティへのMS doc 参照は、それが int であると述べています。これは、定数 .1 または .5 を渡して正しい動作を取得できるため、間違っているように見えます。MS の例では、0 と 1 および最小値と最大値を使用しています。 . それで、私はここで何をする必要がありますか?

私のコード:

xaml:

<ProgressBar x:Name="prgProgress" Width="200" Height="20" Minimum="0" Maximum="100" />

c#:

float numMems = ListToShow.Count; 
float numDone = 0.0f;
int fracDone = 0;
string sProgress = "0%";
foreach (RAM_Member mem in ListToShow)
{
    if (isCanceled == true) break;
    mem.CalculateValues();
    numDone++;
    fracDone = (int)(100.0 * numDone / numMems);
    sProgress = (100 * numDone / numMems).ToString("0.") + "%";
    Dispatcher.BeginInvoke(DispatcherPriority.Background, (SendOrPostCallback)delegate { prgProgress.SetValue(ProgressBar.ValueProperty, fracDone); }, null);
    Dispatcher.BeginInvoke(DispatcherPriority.Background, (SendOrPostCallback)delegate { txtProgress.SetValue(TextBlock.TextProperty, sProgress); }, null);
}
4

1 に答える 1

5

Windows フォームに相当するものにリンクしました。WPF では doubleです。つまり、使用する場合SetValueは、暗黙的な変換がないため、その正確な型を使用する必要があります。

からSetValue:

指定された型が、依存関係プロパティに対して最初に登録されたときに宣言された型と一致しない場合、例外がスローされます。value パラメーターは、常に適切な型として提供する必要があります。

(代わりにラッパーを使用しないのはなぜですか?つまりprgProgress.Value = fracDone

于 2012-01-31T03:32:27.750 に答える