موجزة للجيل التالي من C# Markup لأطر عمل .NET UI
يدعم C# Markup 2 أطر عمل متعددة لواجهة المستخدم، بما في ذلك منصة Uno الممتازة .
إذا كنت لا تعرف Uno، أنصحك بالتحقق منها؛ يعد Uno واحدًا من أفضل أطر عمل .NET UI وأكثرها نضجًا، فهو يقدم نطاقًا رائعًا من الميزات التي ستدعمك عندما تحتاج إلى إنشاء تطبيقات إنتاج واقعية من النهاية إلى النهاية وبسرعة .
dotnet new install Uno.Templates
dotnet new install Modern.CSharp.Templates
md UnoCSharpMarkup2
cd UnoCSharpMarkup2
dotnet new unoapp -preset recommended
dotnet new mcs-uno-markup2 --presentation mvux --allow-scripts yes
تدعم منصة Uno لغة XAML ولكنها اعتمدت مؤخرًا واجهة المستخدم C# بالإضافة إلى Uno C# Markup. يضيف C# Markup 2 خيارًا آخر يتجاوز ما تقدمه متغيرات Gen-1 C# Markup.
من الجيد أن يكون لديك خيارات - الجميع يفوز: يحصل المطورون على التجربة التي يفضلونها أكثر، ويحظى إطار عمل واجهة المستخدم بمزيد من الاعتماد. التحقق من ذلك واختيار ما تريد!
كإنطباع أول، إليك مقارنة سريعة جنبًا إلى جنب:
استمتع بتجربة تطوير واجهة مستخدم تشبه Flutter مع C# Markup 2:
new
أو HorizontalAlignment = HorizontalAlignment.Center
أو () =>
أو nameof()
، ولا مزيد من التحديد لكل ربط TextBlock
نعم، تريد ربطه بخاصية Text
...MyPage.cs
، راجع إطار عمل واجهة المستخدم وواجهات برمجة التطبيقات الأخرى أثناء تحرير MyPage.logic.cs
.لا يلزم XAML / HTML / JavaScript / CSS. لا يوجد محرك أو طبقات تعترض طريقك.
نوجيت
الدردشة (إذا لزم الأمر، انضم إلى DotNetEvolution أولاً)
أفضل مكان لطرح الأسئلة أو المساعدة!
هل تبحث عن C# Markup 1؟ العثور عليه هنا
7 مايو 2024
إصدار C# Markup 2.4 الجديد لـ Uno Platform 5.2 بما في ذلك .NET Single Project
تم تحديث إصدار اليوم بالكامل إلى Uno 5.2 بما في ذلك Uno's .NET Single Project و uno.sdk
!
زائد:
dotnet new unoapp
21 ديسمبر 2023
قوالب C# Markup 2 الجديدة لمنصة Uno 5
بالإضافة إلى بعض أساليب C# Markup 2 الجديدة، يضيف إصدار اليوم دعمًا لقوالب C# Markup 2 الجديدة لـ Uno Platform 5: قالب mcs-uno-markup2
المحدث، وقالب mcs-uno-view
الجديد.
dotnet new unoapp
أو باستخدام معالج حلول Uno لـ Visual Studiomcs-uno-view
الجديد بواسطة البرنامج النصي New-View.ps1
المناسب، والذي تم تضمينه في mcs-uno-markup2
18 نوفمبر 2023
الإصدار 2.3 هو GA - يضيف دعمًا لمكتبات .NET 8 وUno 5 plus 5 Uno!
تم تحديث هذا الإصدار بالكامل إلى إصدار Uno 5 الرائع و.NET 8 GA. يمكنك استخدام Uno Solution Wizard لـ Visual Studio وإضافة مشروع C# Markup 2 إليه في أي وقت باستخدام أمر واحد. يتم دعم جميع تخصيصات معالج Uno: ادمج C# Markup 2 مع MVUX أو MVVM أو XAML أو Uno C# Markup، واستخدم ملحقات Uno Navigation، واستهدف .NET 8 أو .NET 7. جميع الأنظمة الأساسية المستهدفة لـ Uno مدعومة.
يتيح لك قالب مشروع C# Markup 2 الجديد تمامًا على dotnet البدء في أي وقت من الأوقات - تم تحسينه بعناية للحصول على تجربة مطور مثالية: عرض مستكشف الحلول المرتب، وتجميع الملفات التلقائي للعلامات والملفات المنطقية، ومصدر العلامات المرتب، والذكاء المركز، ونقاط بداية واضحة لـ ملحقات الترميز في التعليمات البرمجية الخاصة بك، بالإضافة إلى إعادة التحميل السريع - سواء تلقائيًا أو مع تراكب زر إعادة التحميل السريع في وضع التصحيح، للأنظمة الأساسية التي يمكن لـ IDE الخاص بك إعادة تحميلها بشكل سريع ولكن لا يمكنه (حتى الآن) تحديث واجهة المستخدم تلقائيًا.
استمتع بالتحسينات العامة لـ C# Markup 2، بالإضافة إلى واجهات برمجة تطبيقات C# Markup 2 لـ 5 مكتبات Uno إضافية:
ThemeResource
قابلة للبحث في C# intellisense، مكتوبة بقوةالبدء محدث بالكامل. سيتم تحديث الأمثلة الموجودة في هذا الريبو وهذا الملف التمهيدي قريبًا لإظهار الميزات الجديدة.
NJoy موجزة C# العلامات!
1 نوفمبر 2023
يضيف إصدار المعاينة 2.3 5 مكتبات Uno!
استمتع بالتحسينات العامة لـ C# Markup 2، بالإضافة إلى واجهات برمجة تطبيقات C# Markup 2 لـ 5 مكتبات Uno إضافية:
ThemeResource
قابلة للبحث في C# intellisense، مكتوبة بقوةيمكنك تجربة ذلك اليوم - راجع NuGets المذكورة أعلاه. سيتم إصدار توثيق الميزات الجديدة بالإضافة إلى دليل البدء الجديد مع الإصدار التالي - قريبًا!
27 يونيو 2023
2.2 إطلاق وبدء دعم .NET MAUI
25 مارس 2023
نتائج الاستطلاع موجودة! والفائز هو...
ظهرت نتائج استطلاع مارس 2023 حول ما سيتم إنشاؤه بعد ذلك لـ C# Markup 2!
كانت الإضافة المفاجئة هي طلب C# Markup 2 لـ Avalonia UI في الردود؛ لقد حصلت على استجابة كبيرة دفعتها إلى المركز الثاني القريب جدًا.
فيما يلي نتائج الاستطلاع بما في ذلك الإعجابات للخيارات "الأخرى" Blazor وAvaloniaUI:
والفائز هو: C# Markup 2 لـ MAUI !
شاهد هذا الريبو وقم بتمييزه بنجمة للحصول على الإصدار؛ يمكنك أيضًا مشاهدة تغريدات #CSharpForMarkup لمعرفة التقدم. شكرا لردكم!
28 فبراير 2023
الإصدار الرئيسي - الإصدار 2.0 من C# Markup 2 لـ WinUI 3!
الإصدار 2.0 من C# Markup 2 لـ WinUI 3 موجود هنا! تم التحديث بالكامل إلى .NET 7 وC# 11 وأحدث إصدار من Windows App SDK وUno Platform. مع العديد من التحسينات بما في ذلك 6 منصات مستهدفة مدعومة ودعم إعادة التحميل السريع لـ C# وقوالب مشروع dotnet الجديدة.
يوجه اليكم من أبليكيتا
نتوجه بشكر خاص إلى Applicita لجعل هذا الإصدار ممكنًا؛ من الملهم رؤية شركة تدعم OSS بهذه الطريقة (Applicita أيضًا مفتوحة المصدر للعديد من المكتبات المفيدة الأخرى)
المزيد عن الجديد في هذا الإصدار هنا.
16 فبراير 2023
إصدار جديد من C# Markup 2 لـ WinUI 3 وUno Platform قادم في فبراير 2023
تم التحديث إلى .NET 7 وC# 11 وأحدث إصدار من Windows App SDK وUno Platform. مع العديد من التحسينات - بما في ذلك دعم إعادة التحميل السريع لـ C# وقالب مشروع dotnet الجديد. شاهد هذه المساحة!
14 أبريل 2022
الإصدار 0.8 الجديد: يضيف دعم
ControlTemplate
وتحسيناتStyle
!
انظر هنا وهنا للحصول على القائمة الكاملة للتحسينات
15 فبراير 2022
الإصدار 0.6 الجديد: يضيف WPF والعديد من التحسينات!
انظر هنا للحصول على القائمة الكاملة للتحسينات
30 نوفمبر 2021
تم الإعلان عن C# Markup 2 في UNOCONF 2021!
تستهدف هذه المعاينة الأولى WinUI 3 وUno Platform - بما في ذلك تجميع الويب للمتصفح - مع C# 10 و.NET 6. وهي تدعم .NET Hot Reload لحلقة تطوير داخلية سريعة.
راجع إعلان C# Markup 2 في UNOCONF 2021:
Build()
و Assign()
و Invoke()
.تحقق أولاً مما إذا كانت بيئة التطوير الخاصة بك جاهزة:
إما أن تختار حلاً موجودًا لـ Uno Platform 5.2، أو أنشئ حلاً جديدًا باستخدام معالج قالب Uno Platform أو قالب unoapp الجديد من dotnet. لا تتردد في تحديد أي خيارات؛ يدعم C# Markup 2 بشكل كامل Uno 5.2 مع .NET 8 أو .NET 7 أو MVUX أو MVVM أو XAML أو Uno C# Markup، على جميع الأنظمة الأساسية المستهدفة.
قم بتثبيت أحدث إصدار من Modern.CSharp.Templates لـ dotnet new
للحصول على هذه القوالب لـ Windows App SDK وUno Platform والمزيد
dotnet new install Modern.CSharp.Templates
لرؤية المساعدة حول معلمات القالب:
dotnet new mcs-uno-markup2 -h
أضف مشروع C# Markup 2 إلى حل Uno Platform، على سبيل المثال:
cd C:ReposUnoApp1
dotnet new mcs-uno-markup2 --appRootNamespace InnoWvate.UnoApp1 --presentation mvux --allow-scripts Yes
هذا سوف:
أضف مشروعًا جديدًا UnoApp1.Presentation
إلى الحل، مع مثال عملي:
New-View.ps1
لإضافة المزيد من الصفحات والنماذج بسرعةReadme.md
يحتوي على إرشادات حول كيفية البدء بسرعةتم تصميم مشروع العرض التقديمي مسبقًا لضمان قابلية الصيانة وفقًا لأفضل الممارسات الخاصة بـ C# Markup UI
أضف مراجع حزمة NuGet إلى مشروع العرض التقديمي
أضف مرجعًا إلى مشروع العرض التقديمي في مشروع UnoApp1
لاحظ أنه يمكنك استخدام المعلمة --name
الخاصة بـ dotnet new
لتحديد اسم مشروع Uno الموجود لديك، إذا كان ذلك يختلف عن اسم مجلد الحل (في المثال أعلاه، UnoApp1
). سيتم استخدام الاسم المحدد مع لاحقة .Presentation
للمشروع الجديد أيضًا.
افتح حل Uno أو أعد تحميله واتبع الخطوات الواردة في الملف Readme.md
الخاص بمشروع العرض التقديمي للبدء.
لمعرفة كيفية استخدام C# Markup 2، اقرأ وصف الميزات أدناه.
للحصول على مثال أكثر اكتمالا، راجع التطبيق المثال في هذا الريبو.
يحتوي C# Markup 2 على واجهة برمجة تطبيقات تعريفية كاملة وسلسة لأطر واجهة المستخدم الحالية. إنه يعرض تقريبًا كل تخطيط وعرض وخاصية، بما في ذلك الخصائص المرفقة، ويتضمن وثائق مضمنة كاملة تربط كل مساعد/معلمة ترميزية بالوثائق المضمنة لكائن/خاصية واجهة المستخدم الأساسية.
يمكن أن تحتوي أطر واجهة المستخدم الغنية التي تحتوي عليها أسطح C# Markup 2 على أكثر من 500 نوع من كائنات واجهة المستخدم . على سبيل المثال، التخطيطات وطرق العرض والأنماط، ولكن أيضًا الفرش وعناصر النص المنسق وأوليات الرسم والتحولات والرسوم المتحركة والحالات المرئية والمزيد. بالإضافة إلى ذلك، يوفر C# Markup واجهات برمجة تطبيقات قوية وموجزة للتخطيط والارتباطات والمحولات والقوالب والمزيد.
تبدو التخطيطات وطرق العرض والخصائص وقيم الخصائص كما يلي:
يمكن تعيين جميع الخصائص بطرق الامتداد: الخصائص المحددة في نوع العرض أو أنواعه الأساسية، بالإضافة إلى الخصائص المرفقة.
يمكن بدلاً من ذلك تعيين الخصائص التي تم تعريفها مباشرة في نوع العرض باستخدام المعلمات المسماة:
وهذا مفيد بشكل أساسي للخصائص التي تأخذ أنواعًا بدائية.
الخصائص التي تأخذ قيم التعداد لها طرق تمديد لذلك لا يلزم تكرار اسم التعداد
(كما في TextAlignment: TextAlignment.Center
):
تكون أسماء الخصائص المرفقة مسبوقة بنوع التعريف بالإضافة إلى الشرطة السفلية:
يمكنك تعيين قيم خصائص مرفقة متعددة لنفس نوع التعريف في مكالمة واحدة :
بالإضافة إلى ذلك، هناك أحمال زائدة ملائمة لبعض أنواع طرق العرض باستخدام المعلمات الأكثر استخدامًا فقط:
يتم توفير المحولات الضمنية في مساحة الاسم to
لأنواع قيم الخاصية الشائعة:
هذه هي:
string
، كما هو محدد بواسطة إطار عمل واجهة المستخدم مع سمة TypeConverterstring
، بما في ذلك الصفوف إذا كان من المتوقع وجود أكثر من قيمة واحدة. على سبيل المثال: Button() .CornerRadius (2.5)
أوButton() .CornerRadius ((2.5, 0, 2.5, 0))
مثال باستخدام to.Point
:
Button ( ) . Background ( RadialGradientBrush ( Center : ( 50 , 50 ) , GradientOrigin : ( 100 , 50 ) ) )
مثال باستخدام to.TimeSpan
و to.Duration
:
ColorAnimation ( BeginTime : " 0:0:5 " , Duration : 2.5 )
في كثير من الحالات، تكون الوثائق المضمنة الخاصة بـ to.
يصف النوع القيم والتنسيقات المدعومة؛ خاصة بالنسبة للسلاسل، فهذا يمكن أن يتجنب التخمين.
يمكن تعيين الأنماط مثل هذا:
وتعريفها كالتالي:
في WPF، يمكنك ربط قيمة أداة ضبط النمط (لا يدعم WinUI 3 هذا):
يتم تمرير DataTemplate
كـ Func<UIElement>
:
يمكن إنشاء ControlTemplate
مثل هذا:
.BindTemplate()
ربط خصائص القالب بالأصل الذي تم قالبهtargetType
اختياريةb
هنا حقل static UI_Button
ذو قيمة خالية. في هذا المثال، يعمل فقط على توضيح طريقة واحدة للحصول على التحسس عند تحرير تعبيرات الربط Button
؛ راجع قوة الربط للحصول على التفاصيل. إليك كيفية استخدام ControlTemplate
في Style
ضمني أو صريح:
يمكنك استخدام التعدادات بدلاً من الأرقام لصفوف الشبكة وأعمدةها. يعمل هذا على تحسين إمكانية القراءة ويوفر عليك إعادة ترقيم الصفوف والأعمدة يدويًا عند إضافتها/إزالتها/إعادة ترتيبها
يتم تضمين مساعدات الاختزال كبديل للمجموعات الشائعة من مساعدات الترميز:
تتجاهل كافة التخطيطات القيم null
في children
؛ وهذا يجعل من الممكن الحصول على طرق عرض مشروطة اعتمادًا على قيمة التعبير في وقت إنشاء الصفحة (إعادة).
يسمح مساعد Spread
بإدراج عدد متغير من الأطفال في موضع محدد في قائمة children
(على غرار ما يقدمه Flutter).
بفضل سمة CallerArgumentExpression في C# 10، لن تحتاج إلى استخدام سلاسل أو nameof()
لتحديد مسارات ربط ذات أداء جيد . بدلاً من ذلك، يمكنك استخدام تعبيرات C# والاستمتاع بكل المزايا التي توفرها: التحسس الكامل، فحص المترجم، دعم إعادة التسمية:
لاحظ من وصف التحسس في الصورة أعلاه أن المعلمة pathExpression
تدعم العديد من صيغ الربط الملائمة ، والتي تسمح بما يلي:
viewmodel.path
|| (viewmodel expression).path
، حيث يمكن أن يحتوي path
على .
على سبيل المثال:.Bind (vm.SelectedTweet)
بـ "SelectedTweet".Bind ((vm.SelectedTweet).Title)
يرتبط بـ "العنوان".Bind ((vm.SelectedTweet).Author.Name)
بـ "Author.Name"?
مع مثيلات الكتابة ذات القيمة الخالية للاستمتاع بجودة C# دون الحاجة إلى مثيلات الكائن، على سبيل المثال:.Bind (vm?.SelectedTweet?.Title)
يرتبط بـ "Title"?
يمكن أن يكون ضروريًا لأنه سيتم تقييم التعبير في وقت التشغيل، على الرغم من أننا لا نهتم بقيمته؛ توفر سمة CallerArgumentExpression سلسلة تعبير بالإضافة إلى قيمة التعبير..Bind ("SelectedTweet")
بـ "SelectedTweet" يتم تجاهل أي أحرف محيطة "
أو @
أو مسافة بيضاء في pathExpression
يدعم Bind
تقريبًا جميع الوظائف التي يوفرها إطار عمل واجهة المستخدم للربط. بالإضافة إلى ذلك، هناك العديد من عمليات التحميل الزائد Bind
والتي تسمح بما يلي:
تبدأ صفحة الترميز النموذجية على النحو التالي:
FlutterPage.cs
:
using CSharpMarkup . < UI framework name > ;
using static CSharpMarkup . < UI framework name > . Helpers ;
namespace Examples ;
partial class FlutterPage
{
public void Build ( ) => Content =
لاحظ استخدام partial class
؛ يتيح لك هذا فصل ترميز واجهة المستخدم عن منطق واجهة المستخدم :
FlutterPage.logic.cs
:
using < UI framework namespace > . Controls ;
namespace Examples ;
public sealed partial class FlutterPage : Page , IBuild
{
readonly FlutterViewModel vm ;
public FlutterPage ( )
{
InitializeComponent ( ) ; // Only needed for WinUI
DataContext = vm = < obtain viewmodel instance > ;
Build ( ) ;
مهم:
في ملفات ترميز C# مثل <page>.cs
:
قم بتضمين استخدامات مساحة الاسم CSharpMarkup.*
ولكن لا توجد استخدامات لنموذج كائن واجهة المستخدم مثل using Microsoft.UI.Xaml;
(من خلال التصميم، تكون أسماء الأنواع في مساحة الاسم CSharpMarkup مماثلة لأسماء الأنواع في نموذج كائن واجهة المستخدم، لذا فإن تضمين كليهما قد يسبب الغموض)
حاول قصر استخدام نموذج كائن واجهة المستخدم على ملفات منطق واجهة المستخدم. إذا لزم الأمر، يمكنك استخدام نموذج كائن واجهة المستخدم بأمان في ملفات ترميز C#؛ ومن الممارسات الجيدة إذن تحديد مساحة الاسم العامة باستخدام الأسماء المستعارة، على سبيل المثال، global using UI = Microsoft.UI;
لمزيد من الإرشادات، راجع التعليقات الموجودة في GlobalUsings.cs
لمشروع تم إنشاؤه باستخدام dotnet new mcs-uno-markup2
.
في ملفات منطق واجهة المستخدم مثل <page>.logic.cs
:
لا تستخدم كائنات CSharpMarkup
مثيلات كائن الترميز ليست آمنة للاستخدام خارج تعبير الترميز (نظرًا لميزات الأداء - يحتوي كل نوع كائن ترميز على مثيل ثابت واحد لمنع تخصيص كائن إضافي لكل عرض). ولهذا السبب Assign
Invoke
(انظر أدناه) بتمرير كائن واجهة المستخدم الموجود في كائن الترميز إلى المنطق، بدلاً من كائن الترميز نفسه.
باستخدام Assign
Invoke
يمكنك دمج ترميز واجهة المستخدم مع منطق واجهة المستخدم:
SearchPage.cs
:
SearchPage.logic.cs
:
SearchPage.cs
:
SearchPage.logic.cs
:
ملحوظة :
فيSearchPage.cs
، يعدStackPanel
وTextBox
من أنواع الكائنات الترميزية ، بينما
فيSearchPage.logic.cs
فهي أنواع كائنات إطار عمل واجهة المستخدم المقابلة
لا يوجد امتداد C# Markup IDE (حتى الآن...) لتلوين العلامات بشكل صحيح، ومع ذلك يمكن تحسين إمكانية قراءة C# Markup باستخدام هذا الحل البديل في خيارات Visual Studio:
ضمن Fonts and Colors
، انسخ لون User Types - Classes
User Members - Methods
(باستخدام الزر Custom...
). الآن لن يكون لون ترميز طرق العرض والخصائص هو نفسه.