كيف يمكنني جعل عنصر تحكم يفقد التركيز إذا انقر المستخدم على شيء غير قابل للتركيز؟

StackOverflow https://stackoverflow.com/questions/2298913

  •  21-09-2019
  •  | 
  •  

سؤال

لدي عناصر مملوءة بعشرات العناصر ؛ كل عنصر هو مربع نص ملزمة واثنين من الأزرار. لأنني أريد أن يكون المستخدم قادرًا على علامة التبويب من مربع النص إلى مربع النص ، فقد تم تعيين الأزرار القابلة للتركيز على False. هذا يعمل بشكل جيد. المشكلة الوحيدة هي أنه نظرًا لأن مربعات النص لا تفقد التركيز ، فإن ربطها لا يقوم بتحديث المصدر ، وبالتالي فإن الكود وراء الأزرار لا يعمل مع القيم الصحيحة.

يمكنني التفكير في طريقة لإصلاح ذلك ، على سبيل المثال ، تنقل معالج النقر للأزرار عبر الشجرة المنطقية إلى مربع النص المرتبط به وتصنيع تحديث المصدر بشكل صريح. ولكن يبدو لي أنه يجب أن يكون هناك طريقة أفضل من ذلك ، والتي من المحتمل أن تكون واضحة بالنسبة لي إذا كان لدي فهم أفضل لنموذج التركيز. هل هناك؟

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

المحلول

نظرًا لأن الأداء يمثل مشكلة ، فقد تجد مقال كتبه جوش سميث مفيد. السياق يشبه إلى حد كبير مشكلتك. Josh يحلها عن طريق تشغيل التحديث الربط يدويًا:

    TextBox focusedTextBox = Keyboard.FocusedElement as TextBox;
    if (focusedTextBox == null)
        return;

    BindingExpression textBindingExpr = 
      focusedTextBox.GetBindingExpression(TextBox.TextProperty);
    if (textBindingExpr == null)
        return;

    textBindingExpr.UpdateSource();

نصائح أخرى

إذا سمح لك الأداء بإمكانك تغيير UpdateSourceTrigger من عناصر مربع النص هذه PropertyChanged بدلاً من LostFocus.

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