1

我正在使用 WPF 的 ProgressBar 对象,它有一个 Value 属性,我可以向它传递一个常量 int 或十进制值并且它不会抱怨,但是如果我向它传递一个浮点(或 int 或字符串)变量值,它会报错ArgumentException(例如"Message='0.02380952' is not a valid value for property 'Value'.")对我来说,这对我来说似乎很荒谬,让我难过。我正在关注的MS 示例使用常量浮点值。但是,对 Value 属性的MS 文档引用说它是一个 int,这似乎是错误的,因为我可以将它传递给常量 .1 或 .5 并获得正确的行为,而我的 MS 示例使用 0 和 1 以及最小值和最大值. 那么,我需要在这里做什么?

我的代码:

xml:

<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 回答