2015-06-17 2 views
1

Я только хочу, чтобы положительные числа были введены пользователем в моем текстовом поле.WPF StringFormat, чтобы разрешить только положительные числа

Если я ввода -10 и использовать

<TextBox Text="{Binding Width, StringFormat={}{0:0.00;0.00}}" /> 

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

Как это сделать правильно?

+0

Вы не будете делать это с 'StringFormat'. Вы работаете с установщиком свойства 'Width'? Если нет, вам нужно обработать что-то вроде события «PreviewTextInput» в «TextBox» – dkozl

+0

. Я могу сделать это с помощью 'Interaction.Behaviors', но я бы предпочел бы его в простом' StringFormat' –

+1

'StringFormat' не работает так. Наиболее надежное решение будет включать в себя «Math.Abs ​​(значение)» в настройщике свойства, а затем поднять событие PropertyChanged. Но если вы не можете этого сделать, используйте ваше решение 'Interaction.Behaviors' – dkozl

ответ

1

Поскольку правило проверки навязывает всегда положительна, а также проверить значение в свойстве VM для обеспечения/преобразовать его, а также:

public string Width 
{ 
    get { return _width; } 
    set 
     { 
      int result; 
      int.TryParse(width, out result); 
      _width = (result < 0 ? result *-1 : result).ToString(); 
      PropertyChanged("Width"); 
     } 
} 
3

Есть несколько способов справиться с этим, например, OmegaMan-х. Но мое решение для этого было бы вовсе не использовать текстовое поле. К сожалению, WPF никогда не был благословлен элементом управления spinbox/updown из коробки, но у extended WPFToolkit есть один. Так зачем тратить время на разбор и обработку всех неприятных случаев? Пусть управление сделает тяжелый подъем.

<extToolkit:IntegerUpDown Value="{Binding Width}" Minimum="0"/> 

Совершено

Смежные вопросы