Я пытаюсь создать TextBox, который допускает только положительный целочисленный ввод, и который должен автоматически отображать ввод с учетом специфики культуры (в данном случае en-US, поэтому в качестве разделителя следует использовать знак ',' для больших чисел). Итак:
- Запись 1000 должна отображаться как «1000» в TextBox
- Запись 1000 должна отображаться как таковая, но должна интерпретироваться правильно ...
В настоящее время такое автоматическое форматирование не выполняется в первом случае, а во втором случае выдается ошибка из реализованного мною ValidationRule для проверки правильности ввода (который использует TryParse для проверки правильности числа). вошел).
Я смущаюсь новым мышлением здесь с точки зрения глобализации и интернационализации, поэтому мне интересно, есть ли какая-то магия, связанная с культурой сома, я могу работать, чтобы отделить отображаемое форматирование от фактических данных и сделать автоматизированное форматирование, во время ввода?
Это xaml для TextBox из кода:
<TextBox
Foreground="{StaticResource WindowForegroundBrush}"
Background="{StaticResource EntryFieldBackgroundBrush}"
TextWrapping="NoWrap"
MaxLines="1"
MaxLength="100"
Margin="{StaticResource EntryFormTextBoxMargins}"
VerticalAlignment="Stretch"
RenderTransformOrigin="0.5,0.5"
HorizontalAlignment="Stretch"
VerticalContentAlignment="Center"
MinWidth="300"
MinHeight="30"
x:Name="PopTxtBox"
MaxWidth="300"
TextChanged="PopTxtChange">
<Binding
Path="locationPopulation"
Source="{StaticResource locDT}"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<c:PopValidationRule />
</Binding.ValidationRules>
</Binding>
И вот Правило валидации, которое я написал:
public class PopulationValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
UInt64 popValue;
if (value == null)
{
return new ValidationResult(true, null);
}
else if (!UInt64.TryParse((string)value, NumberStyles.AllowThousands, null, out popValue))
{
return new ValidationResult(false, "Value must be a valid number.");
}
return new ValidationResult(true, null);
}
}
Кроме того, я бы хотел, чтобы TextBox мог отображаться как пустой - прямо сейчас TextBox отображает '0' при загрузке, а оставление TextBox пустым вызывает ошибку проверки (даже если я разрешаю это в Правило проверки). Насколько я могу понять, когда я связываю TextBox с числовым значением, ему не разрешается нулевое значение. Есть ли способ справиться с этим?