8

.NET 4.5 に関連する非常に奇妙な問題があります。今日、あるユーザーから、浮動小数点数 (「2.75」など) をテキストボックスに入力できないと言われました。テキスト ボックスは、"." を受け入れません。これは、私のカルチャ ("de-CH") の浮動小数点数の正しい 'セパレータ' です。

この問題は、ソフトウェアを .NET 4.5 (以前は 4.0) でコンパイルした後に発生しました。

このエラーを再現できます。アプリケーション内の他のすべてのテキスト ボックスは正常に機能しています。テキストボックスは通常の WPF コントロールです。ファンシーなユーザー定義コントロールなどはありません。

繰り返しますが、テキストボックスは「.」を受け入れません。キャラクターとして。完全に無視されているようです。他のすべての文字 (「@」などの特殊文字も) は問題ありません。.NET 4.0 でアプリケーションを再コンパイルすると、問題が解決します。

テキストボックスの xaml は次のとおりです。

<TextBox x:Name="_Hours" Grid.Row="9" Grid.Column="1" VerticalAlignment="Center" 
TextAlignment="Center" FontWeight="Bold" FontSize="16" Text="{Binding ProcessHours, 
Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" TextChanged="Hours_TextChanged" />

ProcessHours の定義:

partial class ProjectTask
{
    ...
    public double TotalProcessHours { get { return ProjectBookings.Sum(b => 
b.ProcessHours); }}
    ...
}

Hours_TextChanged は:

private void Hours_TextChanged(object sender, TextChangedEventArgs e)
{
    UpdateHoursValidity();
}

UpdateHoursValidity() は、テキスト メッセージを実際のテキスト ボックスの下にフェードアウトするだけです。「壊れた」テキストボックスとはまったく関係ありません。

private void UpdateHoursValidity()
{
    string key = IsInvalidHoursWarning ? "ShowWarningStoryboard" : 
"HideWarningStoryboard";
    var storyboard = FindResource(key) as Storyboard;
    if(storyboard != null) storyboard.Begin();
}

したがって、ここでも空想は何もありません。

私がこれまでに試したこと: - テキストボックスの削除、再コンパイル、テキストボックスの追加、再コンパイル -> 同じ状況

「.」を入力しようとすると、デバッグコンソールにメッセージが表示されません。

これに関するアイデアはありますか?

前もって感謝します!

4

2 に答える 2

2

Microsoft Connect サイトで、この問題を引き起こす .NET 4.5 の変更に関する詳細な説明があります: https://connect.microsoft.com/VisualStudio/feedback/details/737301/binding-to-wpf-textbox-seems-to -be-broken-in-net-4-5-beta

回避策に加えて、バインディングにStringFormata を設定するという別のオプションがあります。Delay

于 2015-01-14T13:53:40.247 に答える