#wpftoolkit #lostfocus
#wpftoolkit #lostfocus
Вопрос:
У меня есть элемент управления wpf toolkit с целочисленным обновлением. Я могу изменять значения с помощью клавиш со стрелками и вводить их явно. Но после изменения значения, если я уберу фокус, значение станет равным нулю.
Будем признательны за любую помощь. Спасибо!
<wpftlkit:IntegerUpDown Grid.Column="1" Margin="6" VerticalAlignment="Center" Increment="1" Maximum="7"
Value="{Binding ValueH, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" Style="{StaticResource StyleErrorTemplate}"
IsEnabled="{Binding IsEnabled}" Visibility="{Binding Visibility}" />
Комментарии:
1. Вы должны показать код для DataContext — в частности, свойство «ValueH»…
Ответ №1:
Я подозреваю, что проблема связана с привязкой. Фактическое значение не обновляется до тех пор, пока вы не потеряете фокус (из-за вашего UpdateSourceTrigger), и в этот момент нарушенная привязка или привязка к свойству, которое возвращает значение к нулю, приведет к такому поведению.
Комментарии:
1. Произойдет ли это при ошибке проверки данных в «ValueH». (Я имею в виду проверку. Ошибка hasError истинна)?
2. @Relativity Поведение по умолчанию, прямо сейчас, поскольку вы не показываете в Xaml ничего, что можно было бы сделать по-другому (красная рамка). Я бы рекомендовал прочитать: blogs.msdn.com/b/bethmassi/archive/2008/06/27 /…
Ответ №2:
Так работает инструментарий. Чтобы изменить значение на максимальное или минимальное, когда пользователь вводит значение, выходящее за пределы Min-Max, вам следует загрузить исходные тексты WPF Toolkit (http://wpftoolkit.codeplex.com/SourceControl/changeset/view/98195 ) и измените файл CommonNumericUpdown.cs в папке Xceed.Wpf.Toolkit/NumericUpDown/NumericUpDown, как указано ниже. Обратите внимание на строки перед выбрасыванием исключений, они добавляются.
private void ValidateDefaultMinMax( T? value )
{
// DefaultValue is always accepted.
if( object.Equals( value, DefaultValue ) )
return;
if (IsLowerThan(value, Minimum))
{
Value = Minimum;
throw new ArgumentOutOfRangeException("Minimum", String.Format("Value must be greater than MinValue of {0}", Minimum));
}
else if (IsGreaterThan(value, Maximum))
{
Value = Maximum;
throw new ArgumentOutOfRangeException("Maximum", String.Format("Value must be less than MaxValue of {0}", Maximum));
}
}