كيف يمكنني جعل عنصر تحكم يفقد التركيز إذا انقر المستخدم على شيء غير قابل للتركيز؟
سؤال
لدي عناصر مملوءة بعشرات العناصر ؛ كل عنصر هو مربع نص ملزمة واثنين من الأزرار. لأنني أريد أن يكون المستخدم قادرًا على علامة التبويب من مربع النص إلى مربع النص ، فقد تم تعيين الأزرار القابلة للتركيز على 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
.