wpf - تعلم - كيف يمكنني الحصول على الأحداث TextChanged من مربع تحرير وسرد قابل للتحرير



wpf vs windows forms (3)

لدي مربع تحرير وسرد قابل للتعديل:

<ComboBox IsEditable="true"/>

ما هو الحدث الذي يتم رفعه عند تغيير القيمة المحررة؟ لقد حاولت TextInput ولكن هذا ليس هو الحل.

https://src-bin.com


Answer #1

إضافة --- >> TextBoxBase.TextChanged="ComboBox_TextChanged"


Answer #2

بناءً على النهج أعلاه ، ألقيت نظرة على الكود (XAML) الذي تم إنشاؤه.

<ComboBox x:Name="myComboBox" IsEditable="True"/>

أضف التعليمات البرمجية التالية إلى التهيئة:

myComboBox.AddHandler(System.Windows.Controls.Primitives.TextBoxBase.TextChangedEvent, 
                      new System.Windows.Controls.TextChangedEventHandler(ComboBox_TextChanged));

هذا جيد بالنسبة لي ، لأنني كنت بحاجة إلى قائمة منسدلة قابلة لإعادة الاستخدام ComboBox (قائمة SQL-Server) التي تحتوي على كل السلوكيات.


Answer #3
<ComboBox IsEditable="True" TextBoxBase.TextChanged="ComboBox_TextChanged" />

...يجب القيام به. (بافتراض أنك تريد شيئًا سيطلق في كل مرة يتم فيها إجراء تغيير على النص ، ثم عند انتهاء المستخدم من إدخال النص. وفي هذه الحالة ، ستحتاج إلى حدث آخر - ربما حدث LostFocus أو شيء ما؟)

على أي حال ، فإن السبب وراء عمل XAML أعلاه هو أنه عندما يتم ضبط IsEditable على "صحيح" ، فإن مربع التحرير والسرد يستخدم مربع نص لعرض النص وتحريره. يعد حدث TextChanged الخاص بـ TextBox حدثًا متلألئًا - مما يعني أنه سينطلق عبر شجرة العناصر حتى نتمكن من التعامل معه على ComboBox نفسه.

الشيء الوحيد "الصعب" هو أن ComboBox لا يعرض حدث TextChanged نفسه ولكن لا يزال بإمكانك تعريف معالج له باستخدام حدث مرفق (ومن ثم بناء جملة TextBoxBase.TextChanged).

(ربما تجدر الإشارة إلى الاكتمال ، أنه إذا حدث أن يحتوي مربع التحرير والسرد على أكثر من مربع نص ، فسيتم استدعاء المعالج كلما تم تغيير نص أي منهم.)





wpf