Windows Presentation Foundation (WPF) هو حل واجهة مستخدم Windows وهو جزء من .NET. تم تطويره في الأصل في عام 2006، وكان يُقصد به أن يكون خلفًا لـ WinForms. للحصول على معلومات إضافية، راجع وثائقه الرسمية.
يسمح WPF بإنشاء واجهة مستخدم غنية ومتطورة. إنه يفصل الكود عن واجهة المستخدم باستخدام XAML، وهي لغة تستند إلى XML طورتها Microsoft. cTrader Windows هو تطبيق WPF وجميع عناصر واجهة المستخدم التي تراها مدعومة بهذا الحل.
استخدام WPF يسمح بتطوير واجهة مستخدم غنية بالميزات تقترب من الكمال على مستوى البكسل. ومع ذلك، فإن WPF له منحنى تعلم حاد. إذا كنت ترغب في إنشاء عناصر واجهة مستخدم بسيطة نسبيًا، فقد ترغب في استخدام عناصر التحكم في الرسم البياني أو WinForms.
ملاحظة
يمكن تشغيل الخوارزميات التي تستخدم WinForms أو WPF فقط على أجهزة Windows.
بشكل مماثل لـ WinForms، قبل أن تتمكن من استخدام WPF مع cBots والمؤشرات الخاصة بك، سيتعين عليك إجراء بعض التغييرات على ملف مشروع المؤشر أو cBot الخاص بك. نظرًا لأن WPF يعمل فقط على Windows، سيتعين عليك تغيير إطار العمل المستهدف لمشروع المؤشر أو cBot الخاص بك إلى نسخة Windows من .NET.
للقيام بذلك، افتح ملف المشروع الخاص بك في Visual Studio واستبدل محتوياته بما يلي:
بعد تكوين مشروعك، انقر بزر الماوس الأيمن عليه، حدد إضافة ثم اختر نافذة (WPF)....
في النافذة المفتوحة حديثًا، حدد خيار نافذة WPF. قم بتعيين اسم النافذة إلى MainWindow وانقر على زر إضافة. ستظهر نافذة WPF الجديدة في مستكشف حلول المشروع الخاص بك. سيكون لديها ملفان، ملف .XAML وملف .cs يحتوي على الكود الخلفي.
افتح ملف .XAML وانسخ والصق الكود التالي فيه لتغيير لون خلفيته إلى "SlateGray".
عند إضافة نافذة WPF جديدة، ستستخدم مساحة الاسم الخاصة بالمؤشر أو cBot الخاص بك (مثل cAlgo). في ملف .cs الذي يحتوي على الكود الخلفي للنافذة، قم بتغييره إلى WPF_Test وتأكد من أنه يتطابق مع بيان using في كود المؤشر.
أعد بناء المؤشر إما من Visual Studio أو باستخدام cTrader Algo.
بعد انتهاء عملية البناء، قم بإنشاء نسخة من المؤشر. يجب أن ترى النافذة المخصصة الخاصة بك تظهر تقريبًا فور التشغيل.
عرض لوحة تداول
في هذا المثال، سننشئ لوحة تداول بسيطة باستخدام WPF. قم بإنشاء cBot جديد وقم بتعيين اسمه إلى WPF Trading Panel.
افتح الروبوت الجديد في Visual Studio، وأضف مورد WPF جديد كما هو موضح أعلاه. قم بتعيين اسم النافذة إلى MainWindow.
بعد ذلك، افتح ملف النافذة .XAML والصق الكود التالي فيه:
أعد بناء الكود الخاص بك باستخدام Visual Studio وقم بإنشاء نسخة من cBot الخاص بك. قم بتشغيله ويجب أن تظهر النافذة التالية.
في النافذة، حدد رمزًا من قائمة الرموز وانقر على تنفيذ. في حين أن لوحة التداول الخاصة بنا بسيطة بعض الشيء، إلا أنها تعمل كما هو مقصود. يمكنك استخدامها كقالب لإنشاء عناصر تحكم WPF معقدة.
الكود في ملف .xaml.cs لنافذتنا مسؤول عن إرسال التعليمات إلى cBot الخاص بنا. عند تطوير الكود الخلفي للنوافذ الخاصة بك، اتبع هذه الإرشادات:
قم بإنشاء خدمة لإدارة التفاعلات مع cBot أو مؤشر باستخدام طريقة BeginInvokeOnMainThread().
إذا كنت تبني عناصر تحكم WPF معقدة، استخدم MVVM، IoC وافصل مكونات منطق الأعمال الخاصة بك عن واجهة المستخدم (على سبيل المثال، باستخدام Prism)
لا يمكنك تغيير خاصية ApartmentState لخيط قيد التشغيل بالفعل. نظرًا لأن الخيط الرئيسي لـ cBot أو المؤشر غير مميز بـ STA، يجب عليك استخدام خيط جديد مميز بـ STA لـ WinForms وWPF.
الوصول إلى أعضاء API من سلسلة واجهة المستخدم
كما شرحنا سابقًا، يجب عليك استخدام سلسلة منفصلة مخصصة لتشغيل عناصر تحكم WPF الخاصة بك. فقط الكود الذي يتم تنفيذه على هذه السلسلة سيكون قادرًا على الوصول إلى عناصر التحكم وخصائص النافذة.
ينطبق الشيء نفسه على جميع أعضاء API للخوارزميات. نظرًا لأن API غير آمن للسلاسل، لا يمكنك الوصول إلى أعضاء API من سلسلة واجهة المستخدم. بدلاً من ذلك، يجب عليك إرسال العمل باستخدام طريقة BeginInvokeOnMainThread() في كود المؤشر أو cBot الخاص بك.
قد يؤدي هذا إلى تعقيدات إذا كنت ترغب في تبادل البيانات بين المؤشر أو cBot الخاص بك ونافذة WPF. لحل هذه المشكلة، يمكنك إنشاء فئة وسيطة لإدارة التفاعلات بين cBot أو المؤشر الخاص بك والسلاسل المتعلقة بواجهة المستخدم.