Почему ProgressBar.SetValue выбрасывает ArgumentException с допустимыми значениями? - PullRequest
1 голос
/ 31 января 2012

Я использую объект ProgressBar WPF, у которого есть свойство Value, и я могу передать ему постоянное int или десятичное значение, и оно не будет жаловаться, но если я передам ему значение переменной с плавающей запятой (или int, или string),это вызывает у меня ArgumentException (например, "Message='0.02380952' is not a valid value for property 'Value'."), что мне просто кажется нелепым, и ставит меня в тупик.Пример MS , который я использую, использует постоянные значения с плавающей запятой.Ссылка MS doc на свойство Value , однако, говорит, что это 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);
}

1 Ответ

5 голосов
/ 31 января 2012

Вы связались с эквивалентной формой окна, в WPF - это двойное , что означает, что если вы используете SetValue, вам нужно будет использовать именно этот тип, поскольку неявное преобразование отсутствует.

С SetValue:

Если предоставленный тип не соответствует типу, объявленному для свойства зависимости, как оно было первоначально зарегистрировано, генерируется исключение.Параметр значения всегда должен указываться как соответствующий тип.

(Почему бы вместо этого не использовать оболочку? Т.е. prgProgress.Value = fracDone)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...