1

私の WPF アプリケーションでは、TextBox の ValidationRules を作成して、正常に機能する空の文字列を許可しないようにし、空にすることはできないことをユーザーに伝えるテキストで赤い境界線を表示します。アプリケーションが起動すると、すべてのフィールドが入力待ちの空白になっていますが、まだそれらの周りに赤い境界線が表示されています。これは正常な動作ですか?注:フォームが最初にロードされたときではなく、ユーザーがフォームを使用しているときに、propertychangeイベントまたはlostfocusイベントのいずれかが発生した後に発生することをお勧めします。

私が行っている検証の例:

 <TextBox x:Name="itemNum" HorizontalAlignment="Left" Height="23" Margin="82,58,0,0"     VerticalAlignment="Top" Width="90"
            HorizontalContentAlignment="Left" VerticalContentAlignment="Center" PreviewKeyDown="ItemNum_PreviewKeyDown" 
            PreviewTextInput="ItemNum_PreviewTextInput" TabIndex="0" Validation.ErrorTemplate="{StaticResource validationErrorTemplate}">
            <TextBox.Text>
                <Binding Path="rxID" Mode="TwoWay" StringFormat="{}{0:#}" UpdateSourceTrigger="PropertyChanged">
                    <Binding.ValidationRules>
                        <MY:TextBoxNotEmptyValidationRule x:Name="rxIDValidation" ValidatesOnTargetUpdated="True" />
                    </Binding.ValidationRules>
                </Binding>
            </TextBox.Text>
        </TextBox>

私の TextBoxNotEmptyValidationRule クラス:

public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
     {
        string str = value as string;
        if (string.IsNullOrEmpty(str))
        {
            return new ValidationResult(false, "Value CAN NOT BE empty");
        }
        return ValidationResult.ValidResult;
    }
4

2 に答える 2

0

次のリンクを見ることができます: Validation on Load

IDataErorInfo または INotifyDataErrorInfo を使用する場合、理想的には、これが XAML アプリケーションの通常の動作です。beginInit と EndInit を使用して、目的の出力を実現できます。

于 2014-10-21T07:12:23.140 に答える
0

あなたの論理によれば、それは正常なようです。bool フラグを定義して、それを false または true に設定します。アプリケーションを実行してフラグをチェックするときよりも問題ではありません。フラグ値が初期値の場合は何もしません。これに加えて、「if」チェックでは、フォーカスされた要素もチェックする必要があります。フォーカスされた要素がテキストボックスで、フラグが初期値ではない場合、テキストブロックの境界線を変更できます。

于 2014-10-21T07:10:39.723 に答える