มาร์กอัป C# รุ่นถัด ไปที่กระชับ สำหรับเฟรมเวิร์ก .NET UI
C# Markup 2 รองรับเฟรมเวิร์ก UI ที่หลากหลาย รวมถึงแพลตฟอร์ม Uno ที่ยอดเยี่ยม
หากคุณไม่รู้จัก Uno ฉันขอแนะนำให้คุณลองดู Uno เป็นหนึ่งในเฟรมเวิร์ก .NET UI ที่ดีที่สุดและสมบูรณ์ที่สุด โดยนำเสนอฟีเจอร์ที่หลากหลายที่น่าประทับใจซึ่งจะช่วยคุณเมื่อคุณต้องการสร้างแอปการผลิตในโลกแห่งความเป็นจริง end2end อย่างรวดเร็ว
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 Platform รองรับ XAML แต่เมื่อเร็ว ๆ นี้ ได้นำ C# UI มาใช้ เช่นเดียวกับ Uno C# Markup C# Markup 2 เพิ่มตัวเลือกอื่นที่นอกเหนือไปจากสิ่งที่รุ่นมาร์กอัป C# รุ่นที่ 1 เสนอ
เป็นเรื่องดีที่มีตัวเลือก - ทุกคนมีชัย: นักพัฒนาซอฟต์แวร์ได้รับประสบการณ์ที่พวกเขาชอบที่สุด และเฟรมเวิร์ก UI ได้รับการนำไปใช้มากขึ้น ลองดูและเลือกสิ่งที่คุณชอบ!
เพื่อความประทับใจแรก นี่คือการเปรียบเทียบแบบเทียบเคียงโดยย่อ:
เพลิดเพลินไปกับประสบการณ์การพัฒนา UI ที่เหมือน Flutter ด้วย C# Markup 2:
new
, HorizontalAlignment = HorizontalAlignment.Center
, () =>
หรือ nameof()
ไม่ระบุอีกต่อไป สำหรับการเชื่อมโยง TextBlock
แต่ละรายการที่ใช่ คุณต้องการผูกกับคุณสมบัติ Text
...MyPage.cs
ดูเฟรมเวิร์ก UI และ API อื่นๆ ขณะแก้ไข MyPage.logic.cs
ไม่จำเป็นต้องใช้ XAML / HTML / JavaScript / CSS ไม่มีเครื่องยนต์หรือเลเยอร์ขวางทางคุณ
นูเก็ต
แชท (หากจำเป็น เข้าร่วม DotNetEvolution ก่อน)
สถานที่ที่ดีที่สุดในการถามคำถามหรือช่วยเหลือ!
กำลังมองหามาร์กอัป C# 1 อยู่ใช่ไหม? ค้นหาได้ที่นี่
7 พฤษภาคม 2024
ใหม่ C# Markup 2.4 สำหรับ Uno Platform 5.2 รวม .NET Single Project
การเปิดตัววันนี้ได้รับการอัปเดตเป็น Uno 5.2 อย่างสมบูรณ์ รวมถึง .NET Single Project ของ Uno และ uno.sdk
!
บวก:
dotnet new unoapp
ล่าสุด21 ธันวาคม 2023
เทมเพลต C# Markup 2 ใหม่สำหรับ Uno Platform 5
นอกเหนือจากวิธีการใหม่ของ C# Markup 2 แล้ว การเผยแพร่ในวันนี้ยังเพิ่มการรองรับเทมเพลต C# Markup 2 ใหม่สำหรับ Uno Platform 5: เทมเพลต mcs-uno-markup2
ที่อัปเดต และเทมเพลต mcs-uno-view
ใหม่
dotnet new unoapp
ของ Uno หรือด้วยตัวช่วยสร้างโซลูชัน Uno สำหรับ Visual Studiomcs-uno-view
ใหม่ถูกใช้โดยสคริปต์ New-View.ps1
ที่สะดวกสบาย ซึ่งรวมอยู่ใน mcs-uno-markup2
18 พ.ย. 2023
2.3 Release คือ GA - เพิ่มการรองรับ .NET 8, Uno 5 plus 5 Uno Libraries!
รุ่นนี้ได้รับการอัปเดตอย่างสมบูรณ์เป็นรุ่น 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 ทั้งหมด
เทมเพลตโปรเจ็กต์ Dotnet C# Markup 2 ใหม่เอี่ยมช่วยให้คุณดำเนินการได้ในเวลาอันรวดเร็ว - ปรับให้เหมาะสมอย่างระมัดระวังเพื่อประสบการณ์นักพัฒนาที่ดีที่สุด: มุมมอง explorer โซลูชันที่ไม่กระจัดกระจาย, การจัดกลุ่มไฟล์อัตโนมัติของมาร์กอัปและไฟล์ลอจิก, แหล่งที่มาของมาร์กอัปที่ไม่กระจัดกระจาย, ระบบอัจฉริยะที่โฟกัส, จุดเริ่มต้นที่ชัดเจนสำหรับ ส่วนขยายมาร์กอัปในโค้ดของคุณ บวกกับการรีโหลดแบบ hot reload อย่างรวดเร็ว - ทั้งแบบอัตโนมัติและแบบที่มีการซ้อนทับปุ่ม hot reload ในโหมดแก้ไขข้อบกพร่อง สำหรับแพลตฟอร์มที่ IDE ของคุณสามารถ hot reload ได้แต่ยังไม่สามารถ (ยัง) อัปเดตได้ UI โดยอัตโนมัติ
เพลิดเพลินกับการปรับปรุง C# Markup 2 ทั่วไป รวมถึง C# Markup 2 API สำหรับไลบรารี Uno เพิ่มเติม 5 รายการ:
ThemeResource
ทั้งหมดสามารถค้นหาได้ใน C# Intellisense และพิมพ์อย่างยิ่งการเริ่มต้นใช้งานเป็นข้อมูลล่าสุดอย่างสมบูรณ์ ตัวอย่างใน repo นี้และ readme นี้จะได้รับการอัปเดตเร็วๆ นี้เพื่อแสดงคุณสมบัติใหม่ๆ
NJoy มาร์ก อัป C# ที่กระชับ !
1 พ.ย. 2566
2.3 ดูตัวอย่างเพิ่ม 5 Uno Libraries!
เพลิดเพลินกับการปรับปรุง C# Markup 2 ทั่วไป รวมถึง C# Markup 2 API สำหรับไลบรารี Uno เพิ่มเติม 5 รายการ:
ThemeResource
ทั้งหมดสามารถค้นหาได้ใน C# Intellisense และพิมพ์อย่างยิ่งคุณสามารถลองได้วันนี้ - ดู NuGets ที่ระบุไว้ด้านบน เอกสารคุณสมบัติใหม่พร้อมคู่มือเริ่มต้นใช้งานใหม่จะมาพร้อมกับ รุ่นถัดไป - เร็วๆ นี้!
27 มิถุนายน 2023
2.2 การเปิดตัวและการเริ่มต้นการสนับสนุน .NET MAUI
25 มีนาคม 2023
ผลการสำรวจออกมาแล้ว! และผู้ชนะคือ...
ผลการสำรวจความคิดเห็นในเดือนมีนาคม 2023 เกี่ยวกับสิ่งที่จะสร้างต่อไปสำหรับ C# Markup 2 อยู่ในนั้น!
สิ่งที่น่าประหลาดใจเพิ่มเติมคือการขอ C# Markup 2 สำหรับ Avalonia UI ในการตอบกลับ ได้รับการตอบรับอย่างล้นหลามจนขยับขึ้นมาอยู่อันดับ 2 อย่างใกล้ชิด
นี่คือผลลัพธ์สำหรับการสำรวจความคิดเห็น รวมถึงตัวเลือก "อื่นๆ" Blazor และ AvaloniaUI:
และผู้ชนะคือ: C# Markup 2 สำหรับ MAUI !
ดูและติดดาว repo นี้เพื่อติดตามการเปิดตัว คุณยังสามารถรับชม #CSharpForMarkup ทวีตเพื่อดูความคืบหน้าได้ ขอบคุณสำหรับการตอบกลับของคุณ!
28 กุมภาพันธ์ 2023
รุ่นหลัก - C# Markup 2 เวอร์ชัน 2.0 สำหรับ WinUI 3!
C# Markup 2 เวอร์ชัน 2.0 สำหรับ WinUI 3 มาแล้ว! อัปเดตอย่างสมบูรณ์เป็น .NET 7, C# 11 และ Windows App SDK และแพลตฟอร์ม Uno ล่าสุด ด้วยการปรับปรุงมากมาย รวมถึงแพลตฟอร์มเป้าหมายที่รองรับ 6 แพลตฟอร์ม การรองรับ C# hot reload และเทมเพลตโปรเจ็กต์ใหม่ของ dotnet
มาถึงคุณโดย Applicita
ขอขอบคุณเป็นพิเศษต่อ Applicita ที่ทำให้การเปิดตัวครั้งนี้เป็นไปได้ เป็นแรงบันดาลใจที่ได้เห็นบริษัทสนับสนุน OSS ในลักษณะนี้ (Applicita ยังเปิดไลบรารีที่มีประโยชน์อื่น ๆ อีกหลายแห่งด้วย)
ข้อมูลเพิ่มเติมเกี่ยวกับสิ่งใหม่ๆ ในข่าวประชาสัมพันธ์ฉบับนี้ที่นี่
16 กุมภาพันธ์ 2023
C# Markup 2 ใหม่สำหรับ WinUI 3 และ Uno Platform จะเปิดตัวในเดือนกุมภาพันธ์ 2023
อัปเดตเป็น .NET 7, C# 11 และ Windows App SDK และ Uno Platform ล่าสุด ด้วยการปรับปรุงมากมาย - รวมถึงการสนับสนุน C# hot reload และเทมเพลตโปรเจ็กต์ใหม่ของ dotnet ดูพื้นที่นี้!
14 เมษายน 2022
ใหม่ 0.8: เพิ่มการรองรับ
ControlTemplate
และการปรับปรุงStyle
!
ดูที่นี่และที่นี่สำหรับรายการการปรับปรุงทั้งหมด
15 กุมภาพันธ์ 2565
ใหม่ 0.6 รีลีส: เพิ่ม WPF และการปรับปรุงมากมาย!
ดูรายการการปรับปรุงทั้งหมดได้ที่นี่
30 พฤศจิกายน 2021
C# Markup 2 ประกาศที่ UNOCON 2021!
การแสดงตัวอย่างครั้งแรกนี้กำหนดเป้าหมายไปที่แพลตฟอร์ม WinUI 3 และ Uno รวมถึงเว็บแอสเซมบลีของเบราว์เซอร์ ด้วย C# 10 และ .NET 6 รองรับ .NET Hot Reload สำหรับ dev loop ภายในที่รวดเร็ว
ดูประกาศ C# Markup 2 ที่ UNOCON 2021:
Build()
, Assign()
และ Invoke()
ตรวจสอบก่อนว่าสภาพแวดล้อมการพัฒนาของคุณพร้อมหรือไม่:
เลือกโซลูชัน Uno Platform 5.2 ที่มีอยู่ หรือสร้างโซลูชันใหม่ด้วย Uno Platform Template Wizard หรือเทมเพลต 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 โปรดอ่านคำอธิบายคุณสมบัติด้านล่าง
ดูตัวอย่างที่สมบูรณ์ยิ่งขึ้น ดูแอปตัวอย่างใน repo นี้
C# Markup 2 มี API ที่ชัดเจนและคล่องแคล่วสำหรับเฟรมเวิร์ก UI ที่มีอยู่ โดยจะแสดงเลย์เอาต์ มุมมอง และคุณสมบัติแทบทุกรายการ รวมถึงคุณสมบัติที่แนบมาด้วย และมี เอกสารประกอบแบบอินไลน์ฉบับสมบูรณ์ ที่เชื่อมโยงตัวช่วยมาร์กอัป / พารามิเตอร์แต่ละตัวเข้ากับเอกสารประกอบแบบอินไลน์สำหรับออบเจ็กต์ / คุณสมบัติ UI ที่สำคัญ
กรอบงาน UI ที่หลากหลายที่พื้นผิว C# Markup 2 สามารถมี ประเภทวัตถุ UI ได้มากถึง 500+ ประเภท เช่น เลย์เอาต์ มุมมอง และสไตล์ รวมถึงแปรง องค์ประกอบ Rich Text การวาดภาพเบื้องต้น การแปลง แอนิเมชั่น สถานะภาพ และอื่นๆ นอกจากนี้ C# Markup ยังนำเสนอ API ที่สะดวกสบาย ที่มีประสิทธิภาพและรัดกุมสำหรับเลย์เอาต์ การเชื่อมโยง ตัวแปลง เทมเพลต และอื่นๆ อีกมากมาย
โครงร่าง มุมมอง คุณสมบัติ และค่าคุณสมบัติมีลักษณะดังนี้:
คุณสมบัติทั้งหมดสามารถตั้งค่าด้วยวิธีการขยาย: คุณสมบัติที่กำหนดไว้ในประเภทมุมมองหรือประเภทพื้นฐาน เช่นเดียวกับคุณสมบัติที่แนบมา
คุณสมบัติที่กำหนดไว้โดยตรงบนประเภทมุมมอง สามารถตั้งค่าด้วยพารามิเตอร์ที่มีชื่อได้:
สิ่งนี้มีประโยชน์เป็นหลักสำหรับคุณสมบัติที่ใช้ประเภทดั้งเดิม
คุณสมบัติที่ใช้ค่าแจงนับ มีวิธีการขยาย ดังนั้นจึงไม่จำเป็นต้องระบุชื่อแจงนับซ้ำ
(เช่นเดียวกับใน TextAlignment: TextAlignment.Center
):
ชื่อ คุณสมบัติที่แนบมา จะมีคำนำหน้าด้วยประเภทการกำหนดและขีดล่าง:
คุณสามารถ ตั้งค่าคุณสมบัติที่แนบมาหลายค่า สำหรับประเภทการกำหนดเดียวกัน ในการเรียกครั้งเดียว :
นอกจากนี้ ยังมี การโอเวอร์โหลดที่สะดวกสบาย สำหรับมุมมองบางประเภทด้วยพารามิเตอร์ที่ใช้บ่อยที่สุด:
ตัวแปลงโดยนัยมีอยู่ใน to
มสเปซย่อยเป็นสำหรับประเภทค่าคุณสมบัติทั่วไป:
เหล่านี้คือ:
string
ตามที่ระบุโดยกรอบงาน UI พร้อมด้วยแอตทริบิวต์ 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.
type อธิบายค่าและการจัดรูปแบบที่รองรับ โดยเฉพาะอย่างยิ่งสำหรับสตริง สิ่งนี้สามารถหลีกเลี่ยงการคาดเดาได้
สามารถกำหนดสไตล์ได้ดังนี้:
และกำหนดดังนี้:
ใน WPF คุณสามารถผูกค่าตัวกำหนดสไตล์ได้ (WinUI 3 ไม่รองรับสิ่งนี้):
DataTemplate
ถูกส่งผ่านเป็น Func<UIElement>
:
สามารถสร้าง ControlTemplate
ได้ดังนี้:
.BindTemplate()
ช่วยให้คุณสามารถผูกคุณสมบัติเทมเพลตกับพาเรนต์เทมเพลตได้targetType
เป็นทางเลือกb
นี่คือฟิลด์ static UI_Button
ที่มีค่า Null ในตัวอย่างนี้ ใช้เพื่อสาธิตวิธีหนึ่งในการรับ Intellisense เมื่อแก้ไขนิพจน์การเชื่อมโยงสำหรับ Button
เท่านั้น ดูพลังการผูกสำหรับรายละเอียด นี่คือวิธีที่คุณสามารถใช้ ControlTemplate
ใน Style
โดยนัยหรือชัดเจน:
คุณสามารถใช้ enums แทนตัวเลขสำหรับแถวและคอลัมน์ของกริดได้ วิธีนี้ช่วยเพิ่มความสามารถในการอ่านและช่วยให้คุณไม่ต้องกำหนดหมายเลขแถวและคอลัมน์ใหม่ด้วยตนเองเมื่อเพิ่ม/ลบ/จัดลำดับใหม่
ตัวช่วยชวเลขถูกรวมไว้เป็นทางเลือกแทนการใช้ตัวช่วยมาร์กอัปร่วมกัน:
โครงร่างทั้งหมดจะละเว้นค่า null
ใน children
ของพวกเขา; สิ่งนี้ทำให้สามารถมีมุมมองแบบมีเงื่อนไขได้ ขึ้นอยู่กับค่าของนิพจน์ที่เวลาสร้างเพจ (ใหม่)
ตัวช่วย Spread
อนุญาตให้แทรกจำนวนตัวแปรของลูกในตำแหน่งเฉพาะในรายการ children
(คล้ายกับที่ Flutter เสนอ)
ด้วยแอตทริบิวต์ C# 10 CallerArgumentExpression คุณไม่จำเป็นต้องใช้สตริงหรือ nameof()
เพื่อระบุเส้นทางการเชื่อมโยง ที่มีประสิทธิภาพดี แต่คุณสามารถใช้นิพจน์ C# และเพลิดเพลินไปกับข้อดีทั้งหมดที่ได้รับ: ระบบอัจฉริยะเต็มรูปแบบ การตรวจสอบคอมไพเลอร์ การเปลี่ยนชื่อการสนับสนุน :
หมายเหตุ จากคำอธิบาย Intellisense ในภาพด้านบนว่าพารามิเตอร์ pathExpression
รองรับไวยากรณ์ การเชื่อมโยงความสะดวกสบาย หลายอย่าง ซึ่งอนุญาตให้:
viewmodel.path
|| (viewmodel expression).path
โดยที่ path
สามารถมี .
เช่น:.Bind (vm.SelectedTweet)
เชื่อมโยงกับ "SelectedTweet".Bind ((vm.SelectedTweet).Title)
ผูกกับ "Title".Bind ((vm.SelectedTweet).Author.Name)
ผูกกับ "Author.Name"?
ด้วยอินสแตนซ์ประเภทค่า Null เพื่อเพลิดเพลินกับความดีของ C# โดยไม่ต้องใช้อินสแตนซ์ของวัตถุ เช่น:.Bind (vm?.SelectedTweet?.Title)
เชื่อมโยงกับ "Title"?
อาจจำเป็นเนื่องจากนิพจน์จะได้รับการประเมิน ณ รันไทม์ แม้ว่าเราจะไม่สนใจคุณค่าของมันก็ตาม คุณลักษณะ CallerArgumentExpression จัดเตรียมสตริงนิพจน์ นอกเหนือจาก ค่านิพจน์.Bind ("SelectedTweet")
ผูกกับ "SelectedTweet" อักขระล้อมรอบ "
, @
หรือช่องว่างใน pathExpression
จะถูกละเว้น
Bind
รองรับฟังก์ชันการทำงานเกือบทั้งหมดที่เฟรมเวิร์ก UI นำเสนอสำหรับการเชื่อมโยง นอกจากนี้ ยังมี Bind
overloads มากมายที่อนุญาตให้:
หน้ามาร์กอัปทั่วไปเริ่มต้นดังนี้:
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
; สิ่งนี้ช่วยให้คุณแยกมาร์กอัป UI ออกจาก ตรรกะ UI :
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.*
แต่ ไม่มีการใช้โมเดลวัตถุ UI เช่น using Microsoft.UI.Xaml;
(โดยการออกแบบชื่อประเภทในเนมสเปซ CSharpMarkup จะเหมือนกับชื่อประเภทในรูปแบบวัตถุ UI ดังนั้นการรวมทั้งสองอย่างจะทำให้เกิดความคลุมเครือ)
พยายามจำกัดการใช้โมเดลออบเจ็กต์ UI ให้เป็นไฟล์ลอจิก UI หากคุณจำเป็น คุณ สามารถ ใช้ UI objectmodel ได้อย่างปลอดภัยในไฟล์มาร์กอัป C# แนวทางปฏิบัติที่ดีคือการกำหนดเนมสเปซส่วนกลางโดยใช้นามแฝง เช่น global using UI = Microsoft.UI;
สำหรับคำแนะนำเพิ่มเติม โปรดดูความคิดเห็นใน GlobalUsings.cs
ของโครงการที่สร้างด้วย dotnet new mcs-uno-markup2
ใน ไฟล์ลอจิก UI เช่น <page>.logic.cs
:
อย่าใช้วัตถุ CSharpMarkup
อินสแตนซ์ออบเจ็กต์มาร์กอัปไม่ปลอดภัยที่จะใช้ภายนอกนิพจน์มาร์กอัป (เนื่องจากคุณสมบัติด้านประสิทธิภาพ - ออบเจ็กต์มาร์กอัปแต่ละประเภทมีอินสแตนซ์แบบคงที่เดียวเพื่อป้องกันการจัดสรรออบเจ็กต์เพิ่มเติมสำหรับแต่ละมุมมอง) นั่นคือเหตุผล Assign
และ Invoke
(ดูด้านล่าง) ส่งผ่านออบเจ็กต์ UI ที่มีอยู่ในออบเจ็กต์มาร์กอัปไปยังตรรกะ แทนที่จะเป็นออบเจ็กต์มาร์กอัปเอง
ด้วย Assign
และ Invoke
คุณสามารถรวมมาร์กอัป UI เข้ากับตรรกะ UI ได้:
SearchPage.cs
:
SearchPage.logic.cs
:
SearchPage.cs
:
SearchPage.logic.cs
:
บันทึก :
ในSearchPage.cs
,StackPanel
และTextBox
เป็นประเภทวัตถุ มาร์กอัป ในขณะที่
ในSearchPage.logic.cs
เป็นประเภทออบเจ็กต์ กรอบงาน UI ที่สอดคล้องกัน
ไม่มีส่วนขยาย C# Markup IDE (แต่...) เพื่อทำให้มาร์กอัปมีสีอย่างเหมาะสม อย่างไรก็ตาม สามารถปรับปรุงความสามารถในการอ่านมาร์กอัป C# ได้ด้วยวิธีแก้ไขปัญหาชั่วคราวนี้ในตัวเลือก Visual Studio:
ภายใต้ Fonts and Colors
ให้คัดลอกสีของ User Types - Classes
ไปยัง User Members - Methods
(ด้วยปุ่ม Custom...
) ตอนนี้สีมาร์กอัปสำหรับมุมมองและคุณสมบัติจะไม่เหมือนเดิมอีกต่อไป