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

يصف هذا الموضوع كيفية تفاعل عنصر WindowsFormsHost مع نظام تخطيط WPF.

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

الاختلافات في تخطيط بين البنية الأساسية لعرض برامج Windows و نماذج Windows

WPF يستخدم تخطيط بشكل مستقل عن دقة. كل أبعاد تخطيط WPF يتم تعيينها باستخدام بكسل بشكل مستقل عن الجهاز . بكسل بشكل مستقل عن الجهاز هو واحد من السادس و التسعين من البوصة في الحجم و مستقل عن الدقة و لذلك فانك تحصل على نتائج مشابهة بغض النظر عن ما إذا كنت تعرض على جهاز عرض 72 نقطة في البوصة أو طابعة 19,200 نقطة في البوصة.

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

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

ميزة التخطيط

الوصف

Autosizing

بعض عناصر التحكم Windows Forms تغيير حجمها بنفسها لعرض محتوياتها بشكل صحيح. لمزيد من المعلومات، راجع نظرة عامة حول خاصية الحجم التلقائي.

الارتساء و الإرساء

عناصر تحكم Windows Forms تدعم تغيير الموضع و تغيير الحجم بناءً على الحاوية الأصل. للمزيد من المعلومات، راجع Control.Anchor وControl.Dock.

Autoscaling

عناصر تحكم الحاوية تغير حجمها بنفسها أو التوابع الخاصة بهم استناداً إلى دقة جهاز الإخراج أو حجم الحاوية الافتراضية بالبكسل. لمزيد من المعلومات، راجع تغيير حجم في Windows Forms تلقائياً.

حاويات التخطيط

عناصر تحكم FlowLayoutPanel و TableLayoutPanel تقوم بترتيب عناصر التحكم التابعة الخاصة بها و تغيير حجمها نفسها طبقًا لمحتوياتها.

قيود التخطيط

في العام عناصر تحكم Windows Forms لا يتم تغيير حجمها و تحويلها إلي الحد الممكن في WPF. توضح القائمة التالية القيود المعروفة عندما يحاول عنصر WindowsFormsHost تكامل عنصر تحكم Windows Forms المضيف له إلى نظام تخطيط WPF.

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

  • عناصر تحكم Windows Forms لا يمكن تدويرها أو انحرافها. عنصر WindowsFormsHost يرفع حدث LayoutError إذا قمت بتطبيق تحويل انحراف أو استدارة. إذا لم تعالج حدث LayoutError، يتم رفع InvalidOperationException.

  • في معظم الحالات، عناصر تحكم Windows Forms لا تدعم تغيير الحجم المتناسب. على الرغم من أن الأبعاد الكلية لعنصر التحكم سوف يتغير حجمها, عناصر التحكم التابعة و عناصر المكون لعنصر التحكم قد لا يتغير حجمهم كما هو متوقع. يعتمد هذا القيد على كيفية جودة كل عنصر تحكم Windows Formsفي دعم المقياس. بالإضافة إلى ذلك، لا يمكنك تغيير حجم عناصر تحكم Windows Forms إلى حجم 0 بكسل.

  • عناصر تحكم Windows Forms تدعم تغيير الحجم التلقائي حيث فيه النموذج سيتم تلقائياً بتغيير حجم نفسه و عناصر التحكم الخاصة به استناداً إلى حجم الخط. في واجهة مستخدم WPF, تغيير حجم الخط لا يغير حجم التخطيط بأكمله على الرغم من أن العناصر الفردية قد تغير حجمها بشكل حيوي.

Z-order

في واجهة مستخدم WPF، يمكنك تغيير الترتيب التصاعدي للعناصر للتحكم في تراكب السلوك. يتم رسم عنصر تحكم Windows Forms المستضاف في HWND منفصلة بحيث يتم دوماً رسمها في أعلى عناصر WPF.

يتم أيضاً رسم عنصر تحكم Windows Forms المستضاف أعلى من عناصر Adorner.

سلوك التخطيط

تصف المقاطع التالية أوجه محددة لسلوك تخطيط عند استضافة عناصر تحكم Windows Forms في WPF.

تغيير الحجم , تحويل الوحدة و استقلال الجهاز

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

التحويل بين أنظمة الإحداثي تعتمد على دقة الجهاز الحالي وعلى أي تخطيط أو تحويلات التقديم المطبّقة إلي عنصر WindowsFormsHost أو أصوله.

إذا كان جهاز الإخراج 96 نقطة في البوصة و لم يتم تطبيق تغيير الحجم إلي عنصر WindowsFormsHost, البكسل المستقل عن الجهاز الواحد يساوي بكسل أجهزة واحد.

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

قم بتجاوز أسلوب ScaleChild لتوفير سلوك تغيير الحجم المخصص لعنصر تحكم Windows Forms المستضاف.

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

مشكلة التحويل

الوصف

التقريب

يتم تحديد أبعاد البكسل مستقلة عن الأجهزة WPF كـdouble، و يتم تحديد أبعاد البكسل الأجهزة Windows Forms كـint. في الحالات حيث الأبعاد المستندة إلى double يتم تحويلها إلى أبعاد مستندة إلى int, عنصر WindowsFormsHost يستخدم التقريب القياسي بحيث يتم تقريب قيم الكسر أقل من 0.5 إلى الأسفل نحو 0.

تجاوز الحد

عندما يقوم عنصر WindowsFormsHost بتحويل من قيم double إلي قيم int، يكون التجاوز ممكناً. القيم التي تكون أكبر من MaxValue يتم تعيينها إلي MaxValue.

الخصائص المتعلقة بالتخطيط .

الخصائص التي تتحكم في سلوك تخطيط عنصر التحكم في عناصر تحكم Windows Forms و عناصر WPF يتم تعيينها بشكل مناسب عن طريق عنصر WindowsFormsHost. لمزيد من المعلومات، راجع تعيين خاصية WPF و Windows Forms.

تغييرات التخطيط في عنصر التحكم المستضاف

تغييرات التخطيط في عنصر تحكم Windows Forms المستضاف يتم نشرخ إلي WPF لتشغيل تحديثات التخطيط. أسلوب InvalidateMeasure على WindowsFormsHost يضمن أن تغييرات التخطيط في عنصر التحكم المستضاف يتسبب في تشغيل مشعّل تخطيط WPF.

عناصر تحكم Windows Forms حجم متغير بشكل مستمر

عناصر التحكم Windows Forms التي تدعم المقياس المستمر بشكل كامل تتفاعل مع نظام تخطيط WPF. عنصر WindowsFormsHost يستخدم أساليب MeasureOverride و ArrangeOverride كالمعتاد لتغيير حجم و ترتيب عنصر تحكم Windows Forms المستضاف.

خوارزمية تغيير الحجم

عنصر WindowsFormsHost يستخدم الإجراء التالي لتغيير حجم عنصر تحكم المستضاف:

  1. عنصر WindowsFormsHost يقوم بتجاوز أساليب MeasureOverride و ArrangeOverride.

  2. لتحديد حجم عنصر التحكم المستضاف, أسلوب MeasureOverride يقوم باستدعاء أسلوب GetPreferredSize لعنصر التحكم المستضاف مع قيد مترجم من القيد الذي تم تمريره إلى أسلوب MeasureOverride.

  3. أسلوب ArrangeOverride يحاول تعيين عنصر التحكم المستضاف إلي قيد الحجم المعطى.

  4. إذا كانت خاصية Size لعنصر التحكم المستضاف يتطابق القيد المحدد فيتم تغيير حجم عنصر التحكم المستضاف إلى القيد.

إذا لم تتطابق خاصية Sizeمع القيد المحدد, فان عنصر التحكم المستضاف لا يدعم تغيير الحجم المستمر. على سبيل المثال، عنصر تحكم MonthCalendar يسمح فقط بأحجام منفصلة. الأحجام المسموح بها لعنصر التحكم هذا صواب تتكون من أعداد صحيحة (تمثل عدد الأشهر) للارتفاع والعرض. في الحالات مثل هذا, عنصر WindowsFormsHost يتصرف كما يلي:

  • إذا قامت خاصية Size بإرجاع حجم أكبر من القيد المحدد, يقوم عنصر WindowsFormsHost بقص عنصر التحكم المستضاف. الارتفاع والعرض يتم التعامل معهما بشكل منفصل ، بذلك يمكن قص عنصر التحكم المستضاف في أي اتجاه.

  • إذا قامت خاصية Size بإرجاع حجم أصغر من القيد المحدد, يقبل WindowsFormsHost قيمة الحجم و يقوم بإرجاع القيمة إلي نظام تخطيط WPF.

راجع أيضًا:

المهام

الإرشادات التفصيلية: ترتيب عناصر تحكم نماذج Windows في WPF

المرجع

ElementHost

WindowsFormsHost

المبادئ

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

موارد أخرى

ترتيب عناصر تحكم نماذج Windows في نموذج WPF

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