43

たとえば、テキストボックスに DOT または COMMA を入力しようとすると、テキスト1.02ボックス83,33がそのような値を入力できなくなります (入力が赤くなります)。テキストボックスは float プロパティにバインドされています。なんで?

Powerを実装するクラスの float プロパティにテキストボックスをバインドしましたINotifyPropertyChanged

private float _power;

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

Xaml で

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

現在、カスタム検証はまったくありません。

10進数も試しましたが、どちらも機能しません。文字列の場合、すべて正常に動作します。

4

3 に答える 3

32

.NET 4.5 以降を使用している場合は、4.5 より前の動作を適用できます。

System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false;

Sebastian Lux のブログを参照してください: .NET 4.5 ではUpdateSourceTrigger = PropertyChanged、デフォルトで区切り文字 (カンマまたはドット) を入力できなくなりました。Microsoft によると、これは意図したものです。

于 2016-03-11T14:22:48.767 に答える
29

StringFormat定義をバインディングに追加してみてください。そのようです:

<TextBox Name="txtPower" Height="23" 
    TextWrapping="Wrap" Text="{Binding Path=Power, Mode=TwoWay, 
    UpdateSourceTrigger=PropertyChanged,StringFormat=N2}"></TextBox>
于 2013-01-30T09:48:10.533 に答える