Soru Metin kutusunu float değerine bağlayın. Nokta / virgül girilemiyor


Örneğin bir metin kutusuna DOT veya COMMA girmeyi denediğimde 1.02 veya 83,33 metin kutusu böyle bir değer girmemi önler (ve giriş kırmızıya döner). Metin kutusu bir float özelliğine bağlıdır. Niye ya?

Bir kayan noktaya bir metin kutusunu bağladım Power bir sınıfın uygulanması INotifyPropertyChanged.

private float _power;

public float Power
{
    get { return _power; }
    set
    {
        _power = value;
        OnPropertyChanged("Power");
    }
}

Xaml'da

<TextBox Name="txtPower" Height="23" TextWrapping="Wrap" Text="{Binding Path=Power, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBox>

Şu anda hiçbir özel onaylama yok.

Ayrıca ondalık denedi ama işe yaramıyor. Dize için her şey iyi çalışıyor.


25
2018-01-30 09:44


Menşei




Cevaplar:


Ciltleme için bir StringFormat tanımı eklemeyi deneyin. Öyle:

<TextBox Name="txtPower" Height="23" 
    TextWrapping="Wrap" Text="{Binding Path=Power, Mode=TwoWay, 
    UpdateSourceTrigger=PropertyChanged,StringFormat=N2}"></TextBox>

15
2018-01-30 09:48



StringFormat = {} {##. ##} kullandım ve bu benim için çalışıyor. N2 ne olduğundan emin değilim. Teşekkürler! - LukeSolar
@LukeSolar burada sizin için bir cevaptır stackoverflow.com/questions/4506323/... - huoxudong125
Bu 1.1 gibi bir şey girme sorunu çözülürken, sayı her zaman ondalıklarla (yani, 1 1,00 olarak gösterilir), sayı gibi birden fazla konu ekler, kutuda geri silme veya silme tuşlarını kullanarak herhangi bir nedenle çalışmayacak. İmleci befor noktasına yerleştirmek, ardından yazmayı .11 sonuç olarak 1.11.11 - pixel
@pixel Aynı davranışı yaşıyorum ve IHMO bu kullanılamaz. Bunu değiştirmek dışında herhangi bir çözüm buldunuz mu? UpdateSourceTrigger için LostFocus ? - LuckyLikey
İle mücadele eden herkes için StringFormat Eğer ihtiyacın varsa UpdateSourceTrigger=PropertyChanged olası bir geçici çözüm, bir string özellik ve sonra bu dizgeyi setter içinde doğrulamak. Ayrıca mantıksal olarak bir float, doubleveya decimal özellik, bu nedenle her iki değer senkronize edilir. - LuckyLikey


.NET 4.5 veya daha yeni bir sürümünüz varsa, deneyin.

System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false;

Görmek Sebastian Lux'ın blogu.


22
2018-03-11 14:22





ondalık veya kayan noktaya metin kutusu bağlama nokta ve virgül sorunu gidermek için

1-  UpdateSourceTrigger = LostFocus 
2-  add string format StringFormat={}{0:#.##} to escape unneeded zeros 


<TextBox Name="txtPower" Height="23" 
         TextWrapping="Wrap" Text="{Binding Path=Power, Mode=TwoWay, 
         UpdateSourceTrigger=LostFocus ,StringFormat={}{0:#.##}}"></TextBox>

0
2017-07-06 10:51