سؤال

لدي TextBox مرتبط ببيانات في طلبي كما يلي:(نوع من Height يكون decimal?)

<TextBox Text="{Binding Height, UpdateSourceTrigger=PropertyChanged, 
                        ValidatesOnExceptions=True, 
                        Converter={StaticResource NullConverter}}" />

public class NullableConverter : IValueConverter {
    public object Convert(object o, Type type, object parameter, CultureInfo culture) {
        return o;
    }

    public object ConvertBack(object o, Type type, object parameter, CultureInfo culture) {
        if (o as string == null || (o as string).Trim() == string.Empty)
            return null;
        return o;
    }
}

تم تكوينها بهذه الطريقة، أي سلاسل غير فارغة لا يمكن تحويلها إلى أرقام عشرية تؤدي إلى خطأ في التحقق مما يؤدي إلى تمييز مربع النص على الفور.ومع ذلك، لا يزال من الممكن أن يفقد TextBox التركيز ويظل في حالة غير صالحة.ما أود القيام به هو إما:

  1. لا تسمح لـ TextBox بفقد التركيز حتى يحتوي على قيمة صالحة.
  2. قم بإرجاع القيمة الموجودة في TextBox إلى آخر قيمة صالحة.

ما هي أفضل طريقة للقيام بذلك؟

تحديث:

لقد وجدت طريقة للقيام رقم 2.أنا لا أحب ذلك، لكنه يعمل:

private void TextBox_LostKeyboardFocus(object sender, RoutedEventArgs e) {
    var box = sender as TextBox;
    var binding = box.GetBindingExpression(TextBox.TextProperty);
    if (binding.HasError)
        binding.UpdateTarget();
}

هل يعرف أحد كيفية القيام بذلك بشكل أفضل؟(أو افعل رقم 1.)

هل كانت مفيدة؟

المحلول

يمكنك فرض تركيز لوحة المفاتيح على البقاء على TextBox من خلال التعامل مع PreviewLostKeyBoardFocus حدث مثل هذا:

 <TextBox PreviewLostKeyboardFocus="TextBox_PreviewLostKeyboardFocus" /> 

 private void TextBox_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) {
     e.Handled = true;
 }

نصائح أخرى

يبدو لي أنك تريد التعامل مع حدثين:

أن تركز:سيتم تشغيله عندما يكتسب مربع النص التركيز.يمكنك تخزين القيمة الأولية للمربع.

فقدان التركيز:سيتم تشغيله عندما يفقد مربع النص التركيز.في هذه المرحلة، يمكنك إجراء التحقق من الصحة وتحديد ما إذا كنت تريد التراجع أم لا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top