اكشاف أخطاء التطبيقات المختلطة

يسرد هذا الموضوع بعض المشاكل الشائعة التي تحدث عند تأليف التطبيقات المختلطة والتي تقوم باستخدام تقنيات كلاً من WPF و Windows Forms.

تراكب عناصر التحكم

عناصر التحكم قد لا تتراكب كما تتوقع. يستخدم Windows FormsHWND منفصلة لكل عنصر تحكم. يستخدم WPF HWNDواحد لكافة المحتوى على صفحة. يؤدي هذا الاختلاف فى التطبيق الى سلوكيات غير متوقعة متراكبة.

عنصر تحكم Windows Forms مستضاف في WPF يظهر دوماً في أعلى المحتوى WPF.

محتوى WPF تتم استضافته في عنصر تحكم ElementHost يظهر في الترتيب z الخاص بعنصر التحكم ElementHost. من الممكن تراكب عناصر التحكم ElementHost ، ولكن الذى تمت استضافته فى WPF لا يمكنه الدمج أو التفاعل.

الخاصية التابعة

يمكن للفئات WindowsFormsHost و ElementHost فقط استضافة عنصر أو عنصر تحكم واحد تابع. لاستضافة أكثر من عنصر تحكم أو عنصر ، عليك استخدام حاوية كالمحتوى التابع. على سبيل المثال، يمكنك إضافة زر Windows Forms وعناصر تحكم خانة الاختيار إلى عنصر التحكم System.Windows.Forms.Panel قم بتعيين اللوحة إلى خاصية عنصر التحكم WindowsFormsHost وهى Child. ومع ذلك، لا يمكنك إضافة عناصر تحكم زر وخانة اختيار بشكل منفصل إلى نفس عنصر التحكم WindowsFormsHost.

تحجيم

WPF وWindows Forms يكون لديهم طرازات تحجيم مختلفة. بعض تحويلات الحجوم WPF تكون ذات معنى لعناصر التحكم Windows Forms ، ولكن البعض الآخر ليس كذلك. على سبيل المثال، لتغيير الحجم Windows Formsسيعمل عنصر التحكم إلى 0، ولكن إذا كنت تحاول تغيير الحجم عنصر التحكم نفسه مرة أخرى إلى القيمة غير صفرية، يظل الحجم عنصر التحكم 0. لمزيد من المعلومات، راجع اعتبارات التخطيط لعنصر لاستضافة أشكال ويندوز.

محوّل SCSI

قد يكون هناك تشويش عند عمل الفئات WindowsFormsHost و ElementHost لأنهم يتضمنوا حاوية مخفية. كلاً من الفئات WindowsFormsHost و ElementHost تتضمن حاوية مخفية تسمى محول ، التي تستخدمهم لاستضافة المحتوى. بالنسبة للعنصر WindowsFormsHost ، يشتق المحول من الفئة System.Windows.Forms.ContainerControl. بالنسبة لعنصر التحكم ElementHost ، يشتق المحول من العنصر DockPanel. عند رؤية مراجع للمحول في مواضيع تشغيل متداخل أخرى هذه الحاوية هى ما تتم مناقشته.

التداخل

تداخل عنصر WindowsFormsHost داخل عنصر تحكم ElementHost غير معتمد. تداخل عنصر تحكم ElementHost داخل عنصر WindowsFormsHost غير معتمد.

التركيز

يعمل التركيز بشكل مختلف في WPF و Windows Forms ، مما يعني أنه مشكلات التركيز قد تحدث في تطبيق مختلط. على سبيل المثال، إذا كان لديك تركيز داخل عنصر WindowsFormsHost ، وتقوم إما بتصغير واستعادة الصفحة أو إظهار مربع حوار مشروط ، قد يتم فقد التركيز داخل العنصر WindowsFormsHost. العنصر WindowsFormsHost لا يزال يمتلك التركيز ، ولكن عنصر التحكم بداخله قد يفقد التركيز.

يتأثر التحقق من صحة البيانات أيضاً بالتركيز. يعمل التحقق من الصحة في عنصر WindowsFormsHost ولكنه لا يعمل عندما تقوم بالخروج من علامة الجدولة خارج العنصر WindowsFormsHost ، أو بين عنصرى WindowsFormsHost مختلفين.

تعيين خاصية

تتطلب بعض تعيينات الخاصية تفسير شاملة لتجاوز الختلافات فى التطبيقات بين تقنيات WPF و Windows Forms. تُمكِن تعيينات الخاصية التعليمات البرمجية الخاصة بك من التفاعل مع التغييرات في الألوان والخطوط والخصائص الأخرى. بشكل عام، تعمل تعيينات الخاصية عن طريق الاستماع للأحداث المتغيرة الخاصة بـ الخاصيةأو الاستدعاءات المتغيرة الخاصة بـالخاصية وتعيين الخصائص الملائمة اما على عنصر تحكم تابع أو المحول الخاص به. لمزيد من المعلومات، راجع تعيين خاصية WPF و Windows Forms.

الخصائص المتعلقة بالتخطيط لمحتوى مستضاف

عندما يتم تعيين الخاصية WindowsFormsHost.Child أو ElementHost.Child ، يتم تعيين عدة خصائص متعلقة بالتخطيط للمحتوى المستضاف بشكل تلقائي. تغيير هذه المحتويات يؤدي الى سلوكيات تخطيط غير متوقعة.

يتم إرساء المحتوى الذى تمت استضافته لتعبئة WindowsFormsHost والأصل ElementHost. لتمكين سلوك التعبئة هذا ، يتم تعيين العديد من الخصائص عندما تقوم بتعيين الخاصية التابعة. يسرد الجدول التالي أي من خصائص المحتويات يتم تعيينها بواسطة الفئات ElementHost و WindowsFormsHost.

الفئة المضيفة

خصائص المحتوى

ElementHost

Height

Width

Margin

VerticalAlignment

HorizontalAlignment

WindowsFormsHost

Margin

Dock

AutoSize

Location

MaximumSize

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

التنقل في تطبيقات WPF

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

التشغيل المتداخل لحلقة رسالة

عند العمل بحلقات الرسالة Windows Forms ، قد لا تتم معالجة الرسائل كما هو متوقع. يتم استدعاء الأسلوب EnableWindowsFormsInterop بواسطة منشىء WindowsFormsHost. يضيف هذا الأسلوب عامل تصفية رسائل الى حلقات رسالة WPF. يقوم عامل التصفية هذا باستدعاء الأسلوب Control.PreProcessMessage إذا كان System.Windows.Forms.Control هو هدف الرسالة ويترجم/يبعث الرسالة.

إذا قمت بإظهار Window في حلقة رسالة Windows Forms بواسطة Application.Run ، لا يمكنك كتابة أي شيء ما لم تستدعى الأسلوب EnableModelessKeyboardInterop. الأسلوب EnableModelessKeyboardInterop يأخذ Window ويضيف System.Windows.Forms.IMessageFilter الذي يعيد توجيه الرسائل الأساسية المتعلقة الى حلقة رسالة WPF. لمزيد من المعلومات، راجع بنية إدخال النماذج Windows و إمكانية التشغيل التفاعلي WPF.

اللاشفافية والجعل فى مستويات

لا تدعم الفئة HwndHost التقسيم الى مستويات. وهذا يعني أن هذا تعيين الخاصية Opacity على العنصر WindowsFormsHost ليس له أي تأثير ، ولن يحدث أى خلط مع نوافذ WPF الأخرى التي تمتلك AllowsTransparency تم تعيينه إلى true.

التخلص

عدم التصرف فى الفئات بشكل صحيح يمكن أن يسبب حدوث تسرب الموارد. في التطبيقات المختلط، تأكد من أن WindowsFormsHost ElementHostيتم التخلص من الفئات، أو قد حدوث تسرب موارد. Windows Forms disposes ElementHost عناصر التحكم when its non-modal Form parent closes. WPF disposes WindowsFormsHost عناصر when your تطبيق shuts أسفل. من الممكن إظهار عنصر WindowsFormsHost في Window في حلقة رسالة Windows Forms. في هذه الحالة، قد لا تتلقى التعليمات البرمجية الإعلام انه الآن يتم إيقاف تشغيل التطبيق الخاص بك.

تمكين أنماط مرئية

لا يمكن تمكين أنماطMicrosoft Windows XP المرئية على عناصر التحكم Windows Forms. يسمى الأسلوب Application.EnableVisualStyles في القالب الخاص لتطبيق Windows Forms. على الرغم من أنه لا يتم استدعاء هذا الأسلوب بشكل افتراضي في حالة استخدام Visual Studio لإنشاء مشروع ، ستحصل على أنماط Microsoft Windows XP المرئية لعناصر التحكم، إذا كان الإصدار 6.0 من Comctl32.dll متوافر. يجب استدعاء الأسلوب EnableVisualStyles قبل أن يتم إنشاء المقابض على مؤشر الترابط. لمزيد من المعلومات، راجع كيفية القيام بما يلي: تمكين الأنماط المرئية في تطبيق مختلط.

العناصر المرخصة

عناصر التحكم Windows Forms المرخصة التي تعرض معلومات الترخيص في مربع رسالة للمستخدم قد يتسبب في سلوك غير متوقع لتطبيق مختلط. بعض عناصر التحكم المرخصة تقوم بإظهار مربع حواراستجابة لانشاء المعالجة. على سبيل المثال، عنصر التحكم المرخص قد يقوم بإعلام المستخدم بانه مطلوب ترخيص أو أن المستخدم لديه ثلاثة استخدامات تجريبية متبقية.

يشتق العنصر WindowsFormsHost من الفئة HwndHost ومعالجة عنصر التحكم التابع يتم إنشائه المؤشر بداخل الأسلوب BuildWindowCore. لا تسمح الفئة HwndHost للرسائل أن تتم معالجتها في الأسلوب BuildWindowCore ولكن عرض مربع حوار يتسبب فى ارسال الرسائل. لتمكين سيناريو الترخيص هذا قم باستدعاء الأسلوب Control.CreateControl على عنصر التحكم قبل تعيينه كتابع للعنصر WindowsFormsHost.

مصمم WPF

يمكنك تصميم محتوى WPF الخاص بك باستخدام مصمم WPF لـ Visual Studio. تسرد المقاطع التالية بعض المشاكل الشائعة التي تحدث عند تأليف التطبيقات المختلطة باستخدام مصمم WPF.

يتم تجاهل BackColorTransparent في وقت التصميم

قد لا تعمل الخاصية BackColorTransparent كما هو متوقع في وقت التصميم.

إذا كان عنصر تحكم WPF هو أصل غير مرئي ، يتجاهل وقت تشغيل WPF القيمة BackColorTransparent. السبب فى أن BackColorTransparent قد يتم تجاهله هو لأن كائن ElementHost تم إنشائه فى AppDomainمنفصل. ومع ذلك، عند تشغيل التطبيق ، يعمل BackColorTransparent كما هو متوقع.

تظهر قائمة أخطاء وقت التصميم عندما يتم حذف مجلد الكائنات

تظهر قائمة أخطاء وقت التصميم عندما يتم حذف مجلد الكائنات

عند التصميم باستخدام ElementHost ، يستخدم مصمم نماذج Windows الملفات التي تم إنشاؤها في مجلد "Debug" أو "Release" داخل مجلد كائنات المشروع الخاص بك. إذا قمت بحذف هذه الملفات تظهر قائمة أخطاء وقت التصميم. لإصلاح هذه المشكلة ، قم بإعادة إنشاء المشروع. لمزيد من المعلومات، راجع أخطاء وقت التصميم في مصمم نماذج Windows.

ElementHost و IME

عناصر تحكم WPF التي تتم استضافتها في ElementHost حالياً لا تعتمد الخاصية ImeMode. سيتم تجاهل التغييرات ImeMode بواسطة عناصر التحكم المستضافة.

راجع أيضًا:

المهام

كيفية القيام بما يلي: تمكين الأنماط المرئية في تطبيق مختلط

المرجع

ElementHost

WindowsFormsHost

المبادئ

بنية إدخال النماذج Windows و إمكانية التشغيل التفاعلي WPF

اعتبارات التخطيط لعنصر لاستضافة أشكال ويندوز

تعيين خاصية WPF و Windows Forms

أخطاء وقت التصميم في مصمم نماذج Windows

موارد أخرى

إمكانية التشغيل المتداخل في مصمم WPF

الترحيل و إمكانية التشغيل التفاعلى