在 .NET MAUI 中如何更好地自定義控件

點擊上方藍字

關注我們

(本文閱讀時間:10分鐘)

今天,我想談談并向您展示在.NET MAUI中完全自定義控件的方法。在查看 .NET MAUI 之前,讓我們回到幾年前,回到 Xamarin.Forms 時代。那時,我們有很多自定義控件的方法, 比如當您不需要訪問平臺特有的 API 來自定義控件時,可以使用Behaviors ; 如果您需要訪問平臺特有的 API,可以使用 Effects。

讓我們稍微關注一下Effects API。它是由于 Xamarin 缺乏多目標體系結構而創建的。這意味著我們無法在共享級別(在 .NET 標準 csproj 中)訪問特定于平臺的代碼。它工作得很好,可以讓您免于創建自定義渲染器。

今天,在 .NET MAUI 中,我們可以利用多目標架構的強大功能,并在我們的共享項目中訪問特定于平臺的 API。那么我們還需要?Effects?嗎?不需要了,因為我們可以訪問我們所需要的所有平臺的所有代碼和 API。

那么讓我們談談在 .NET MAUI 中自定義一個控件的所有可能性以及在此過程中您可以遇到的一些障礙。為此,我們將自定義 Image 控件,添加對呈現的圖像進行著色的功能。

注意:如果您想使用?Effects?,.NET?MAUI仍然支持,但不建議使用

源代碼參考來自 .NET MAUI Community Toolkit 的IconTintColor。

  • .NET MAUI:

    https://dotnet.microsoft.com/zh-cn/apps/maui?ocid=AID3052907

  • Xamarin.Forms:

    https://docs.microsoft.com/zh-cn/xamarin/xamarin-forms/?WT.mc_id=dotnet-0000-bramin?ocid=AID3052907

  • Behaviors:

    https://docs.microsoft.com/zh-cn/xamarin/xamarin-forms/app-fundamentals/behaviors/?WT.mc_id=dotnet-0000-bramin?ocid=AID3052907

  • Effects:

    https://docs.microsoft.com/zh-cn/xamarin/xamarin-forms/app-fundamentals/effects/introduction?WT.mc_id=dotnet-0000-bramin?ocid=AID3052907

  • 自定義渲染器:

    https://docs.microsoft.com/zh-cn/xamarin/xamarin-forms/app-fundamentals/custom-renderer/?WT.mc_id=dotnet-0000-bramin?ocid=AID3052907

  • IconTintColor:

    https://github.com/CommunityToolkit/Maui/tree/main/src/CommunityToolkit.Maui/Behaviors/PlatformBehaviors/IconTintColor

8322a8da2ea7cdce015911a7e9105d9e.png

自定義現有控件?

090094abc28d61280f5f3404d26836bf.png

要向現有控件添加額外的功能,需要我們對其進行擴展并添加所需的功能。

讓我們創建一個新控件,class ImageTintColor : Image 并添加一個新的 BindableProperty,我們將利用它來更改 Image 的色調顏色。

public class ImageTintColor : Image
{public static readonly BindableProperty TintColorProperty =BindableProperty.Create(nameof(TintColor), typeof(Color), typeof(ImageTintColor), propertyChanged: OnTintColorChanged);public Color? TintColor{get => (Color?)GetValue(TintColorProperty);set => SetValue(TintColorProperty, value);}static void OnTintColorChanged(BindableObject bindable, object oldValue, object newValue){// ...}
}

熟悉 Xamarin.Forms 的人會認識到這一點;它與您將在 Xamarin.Forms 應用程序中編寫的代碼幾乎相同。

.NET MAUI 平臺特定的 API 工作將在?OnTintColorChanged?委托上進行。讓我們來看看。

public class ImageTintColor : Image
{public static readonly BindableProperty TintColorProperty =BindableProperty.Create(nameof(TintColor), typeof(Color), typeof(ImageTintColor), propertyChanged: OnTintColorChanged);public Color? TintColor{get => (Color?)GetValue(TintColorProperty);set => SetValue(TintColorProperty, value);}static void OnTintColorChanged(BindableObject bindable, object oldValue, object newValue){var control = (ImageTintColor)bindable;var tintColor = control.TintColor;if (control.Handler is null || control.Handler.PlatformView is null){// 執行 Handler 且 PlatformView 為 null 時的解決方法control.HandlerChanged += OnHandlerChanged;return;}if (tintColor is not null){
#if ANDROID// 注意 Android.Widget.ImageView 的使用,它是一個 Android 特定的 API// 您可以在這里找到`ApplyColor`的Android實現:https://github.com/pictos/MFCC/blob/1ef490e507385e050b0cfb6e4f5d68f0cb0b2f60/MFCC/TintColorExtension.android.cs#L9-L12ImageExtensions.ApplyColor((Android.Widget.ImageView)control.Handler.PlatformView, tintColor);
#elif IOS// 注意 UIKit.UIImage 的使用,它是一個 iOS 特定的 API// 您可以在這里找到`ApplyColor`的iOS實現:https://github.com/pictos/MFCC/blob/1ef490e507385e050b0cfb6e4f5d68f0cb0b2f60/MFCC/TintColorExtension.ios.cs#L7-L11ImageExtensions.ApplyColor((UIKit.UIImageView)control.Handler.PlatformView, tintColor);
#endif}else{
#if ANDROID// 注意 Android.Widget.ImageView 的使用,它是一個 Android 特定的 API// 您可以在這里找到 `ClearColor` 的 Android 實現:https://github.com/pictos/MFCC/blob/1ef490e507385e050b0cfb6e4f5d68f0cb0b2f60/MFCC/TintColorExtension.android.cs#L14-L17ImageExtensions.ClearColor((Android.Widget.ImageView)control.Handler.PlatformView);
#elif IOS// 注意 UIKit.UIImage 的使用,它是一個 iOS 特定的 API// 您可以在這里找到`ClearColor`的iOS實現:https://github.com/pictos/MFCC/blob/1ef490e507385e050b0cfb6e4f5d68f0cb0b2f60/MFCC/TintColorExtension.ios.cs#L13-L16ImageExtensions.ClearColor((UIKit.UIImageView)control.Handler.PlatformView);
#endif}void OnHandlerChanged(object s, EventArgs e){OnTintColorChanged(control, oldValue, newValue);control.HandlerChanged -= OnHandlerChanged;}}
}

因為 .NET MAUI 使用多目標,我們可以訪問平臺的詳細信息并按照我們想要的方式自定義控件。ImageExtensions.ApplyColor 和 ImageExtensions.ClearColor 方法是添加或刪除圖像色調的輔助方法。

您可能會注意到 Handler 和 PlatformView 的 null 檢查。這可能是您在使用過程中遇到的第一個阻礙。在創建和實例化 Image 控件并調用 BindableProperty 的 PropertyChanged 委托時,Handler 可以為 null。因此,如果不進行 null 檢查,代碼將拋出 NullReferenceException。這聽起來像一個bug,但它實際上是一個特性!這使 .NET MAUI 工程團隊能夠保持與 Xamarin.Forms 上的控件相同的生命周期,從而避免從 Forms 遷移到 .NET MAUI 的應用程序的一些重大更改。

現在我們已經完成了所有設置,可以在 ContentPage 中使用控件了。在下面的代碼片段中,您可以看到如何在 XAML 中使用它:

<ContentPage x:Class="MyMauiApp.ImageControl"xmlns="http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"xmlns:local="clr-namespace:MyMauiApp"Title="ImageControl"BackgroundColor="White"><local:ImageTintColor x:Name="ImageTintColorControl"Source="shield.png"TintColor="Orange" />
</ContentPage>

3d86cd6ec62502a53631e20addb55b48.png

使用附加屬性和 PropertyMapper?

1182d78d5d3efa08cd155587bfdb8fd3.png

自定義控件的另一種方法是使用 AttachedProperties,當您不需要將其綁定到特定的自定義控件時是 使用BindableProperty。

下面是我們如何為 TintColor 創建一個 AttachedProperty:

public static class TintColorMapper
{public static readonly BindableProperty TintColorProperty = BindableProperty.CreateAttached("TintColor", typeof(Color), typeof(Image), null);public static Color GetTintColor(BindableObject view) => (Color)view.GetValue(TintColorProperty);public static void SetTintColor(BindableObject view, Color? value) => view.SetValue(TintColorProperty, value);public static void ApplyTintColor(){// ...}
}

同樣,我們在 Xamarin.Forms 上為 AttachedProperty 提供了樣板,但如您所見,我們沒有 PropertyChanged 委托。為了處理屬性更改,我們將使用 ImageHandler 中的 Mapper。您可以在任何級別添加 Mapper,因為成員是靜態的。我選擇在 TintColorMapper 類中執行此操作,如下所示。

public static class TintColorMapper
{public static readonly BindableProperty TintColorProperty = BindableProperty.CreateAttached("TintColor", typeof(Color), typeof(Image), null);public static Color GetTintColor(BindableObject view) => (Color)view.GetValue(TintColorProperty);public static void SetTintColor(BindableObject view, Color? value) => view.SetValue(TintColorProperty, value);public static void ApplyTintColor(){ImageHandler.Mapper.Add("TintColor", (handler, view) =>{var tintColor = GetTintColor((Image)handler.VirtualView);if (tintColor is not null){
#if ANDROID// 注意 Android.Widget.ImageView 的使用,它是一個 Android 特定的 API// 您可以在這里找到`ApplyColor`的Android實現:https://github.com/pictos/MFCC/blob/1ef490e507385e050b0cfb6e4f5d68f0cb0b2f60/MFCC/TintColorExtension.android.cs#L9-L12ImageExtensions.ApplyColor((Android.Widget.ImageView)control.Handler.PlatformView, tintColor);
#elif IOS// 注意 UIKit.UIImage 的使用,它是一個 iOS 特定的 API// 您可以在這里找到`ApplyColor`的iOS實現:https://github.com/pictos/MFCC/blob/1ef490e507385e050b0cfb6e4f5d68f0cb0b2f60/MFCC/TintColorExtension.ios.cs#L7-L11ImageExtensions.ApplyColor((UIKit.UIImageView)handler.PlatformView, tintColor);
#endif}else{
#if ANDROID// 注意 Android.Widget.ImageView 的使用,它是一個 Android 特定的 API// 您可以在這里找到 `ClearColor` 的 Android 實現:https://github.com/pictos/MFCC/blob/1ef490e507385e050b0cfb6e4f5d68f0cb0b2f60/MFCC/TintColorExtension.android.cs#L14-L17ImageExtensions.ClearColor((Android.Widget.ImageView)handler.PlatformView);
#elif IOS// 注意 UIKit.UIImage 的使用,它是一個 iOS 特定的 API// 您可以在這里找到`ClearColor`的iOS實現:https://github.com/pictos/MFCC/blob/1ef490e507385e050b0cfb6e4f5d68f0cb0b2f60/MFCC/TintColorExtension.ios.cs#L13-L16ImageExtensions.ClearColor((UIKit.UIImageView)handler.PlatformView);
#endif}});}
}

代碼與之前顯示的幾乎相同,只是使用了另一個 API 實現,在本例中是 AppendToMapping 方法。如果您不想要這種行為,可以改用 CommandMapper,它將在屬性更改或操作發生時觸發。

請注意,當我們處理 Mapper 和 CommandMapper 時,我們將為項目中使用該處理程序的所有控件添加此行為。在這種情況下,所有Image控件都會觸發此代碼。在某些情況下這可能并不是您想要的,如果您需要更具體的方法, PlatformBehavior 方法將會非常適合。

現在我們已經設置好了所有內容,可以在頁面中使用控件了,在下面的代碼片段中,您可以看到如何在 XAML 中使用它。

<ContentPage x:Class="MyMauiApp.ImageControl"xmlns="http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"xmlns:local="clr-namespace:MyMauiApp"Title="ImageControl"BackgroundColor="White"><Image x:Name="Image"local:TintColorMapper.TintColor="Fuchsia"Source="shield.png" />
</ContentPage>

b0e68413ff0d6914c950018a60ad90c0.png

使用PlatformBehavior

0a30578feb4b9ac48222c8a15efea18e.png

PlatformBehavior 是在 .NET MAUI 上創建的新 API,它讓您在需要以安全的方式訪問平臺特有的 API 時,可以更輕松地自定義控件(這是安全的因為它確保 Handler 和 PlatformView 不為 null )。它有兩種方法來重寫:OnAttachedTo 和 OnDetachedFrom。此 API 用于替換 Xamarin.Forms 中的 Effect API 并利用多目標體系結構。

在此示例中,我們將使用部分類來實現特定于平臺的 API:

//文件名 : ImageTintColorBehavior.cspublic partial class IconTintColorBehavior 
{public static readonly BindableProperty TintColorProperty =BindableProperty.Create(nameof(TintColor), typeof(Color), typeof(IconTintColorBehavior), propertyChanged: OnTintColorChanged);public Color? TintColor{get => (Color?)GetValue(TintColorProperty);set => SetValue(TintColorProperty, value);}
}

上面的代碼將被我們所針對的所有平臺編譯。

現在讓我們看看?Android 平臺的代碼:

//文件名: ImageTintColorBehavior.android.cspublic partial class IconTintColorBehavior : PlatformBehavior<Image, ImageView> 
// 注意 ImageView 的使用,它是 Android 特定的 API{protected override void OnAttachedTo(Image bindable, ImageView platformView) =>ImageExtensions.ApplyColor(bindable, platformView); 
// 您可以在這里找到`ApplyColor`的Android實現:https://github.com/pictos/MFCC/blob/1ef490e507385e050b0cfb6e4f5d68f0cb0b2f60/MFCC/TintColorExtension.android.cs#L9-L12protected override void OnDetachedFrom(Image bindable, ImageView platformView) =>ImageExtensions.ClearColor(platformView); 
// 您可以在這里找到 `ClearColor` 的 Android 實現:https://github.com/pictos/MFCC/blob/1ef490e507385e050b0cfb6e4f5d68f0cb0b2f60/MFCC/TintColorExtension.android.cs#L14-L17
}

這是 iOS 平臺的代碼:

//文件名: ImageTintColorBehavior.ios.cspublic partial class IconTintColorBehavior : PlatformBehavior<Image, UIImageView> 
// 注意 UIImageView 的使用,它是一個 iOS 特定的 API
{protected override void OnAttachedTo(Image bindable, UIImageView platformView) => ImageExtensions.ApplyColor(bindable, platformView); 
// 你可以在這里找到`ApplyColor`的iOS實現:https://github.com/pictos/MFCC/blob/1ef490e507385e050b0cfb6e4f5d68f0cb0b2f60/MFCC/TintColorExtension.ios.cs#L7-L11protected override void OnDetachedFrom(Image bindable, UIImageView platformView) => ImageExtensions.ClearColor(platformView); 
// 你可以在這里找到`ClearColor`的iOS實現:https://github.com/pictos/MFCC/blob/1ef490e507385e050b0cfb6e4f5d68f0cb0b2f60/MFCC/TintColorExtension.ios.cs#L13-L16
}

正如您所看到的,我們不需要關心是否 Handler 為 null ,因為 PlatformBehavior<T, U>?會為我們處理。

我們可以指定此行為涵蓋的平臺特有的 API 的類型。如果您想為多個類型應用控件,則無需指定平臺視圖的類型(例如,使用 PlatformBehavior<T> );您可能想在多個控件中應用您的行為,在這種情況下,platformView 將是 Android 上的 PlatformBehavior<View> 和 iOS 上的 PlatformBehavior<UIView>。

而且用法更好,您只需要調用 Behavior 即可:

<ContentPage x:Class="MyMauiApp.ImageControl"xmlns="http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"xmlns:local="clr-namespace:MyMauiApp"Title="ImageControl"BackgroundColor="White"><Image x:Name="Image"Source="shield.png"><Image.Behaviors><local:IconTintColorBehavior TintColor="Fuchsia"></Image.Behaviors></Image>
</ContentPage>

注意:當 Handler 與 VirtualView 斷開連接時,即觸發 Unloaded 事件時,PlatformBehavior 將調用 OnDetachedFrom。Behavior API 不會自動調用 OnDetachedFrom 方法,作為開發者需要自己處理。

4ea1d776ea876a98d16c6b100dc0dd29.png

總結

423fad8a965839bf5b87b91a6dbf1142.png

在這篇文章中,我們討論了自定義控件以及與平臺特有的 API 交互的各種方式。沒有正確或錯誤的方法,所有這些都是有效的解決方案,您只需要看看哪種方法更適合您的情況。我想說的是,在大多數情況下,您會想要使用 PlatformBehavior,因為它旨在使用多目標方法并確保在控件不再使用時清理資源。要了解更多信息,請查看有關自定義控件的文檔。

  • 有關自定義控件的文檔:

    https://docs.microsoft.com/zh-cn/dotnet/maui/user-interface/handlers/customize?ocid=AID3052907

  • 有關更多的MAUI workshop,請查看:

    https://github.com/dotnet-presentations/dotnet-maui-workshop/blob/main/README.zh-cn.md

ef44044f3f79ede0a415f06dbf5ddf5a.png

謝謝你讀完了本文~相信你一定有一些感想、觀點、問題想要表達。歡迎在評論區暢所欲言,期待聽到你的“聲音”哦!

同時,喜歡的內容也不要忘記轉發給你的小伙伴們,謝謝你的支持!

65b13b4e2006383c848d17336c6f36c1.jpeg

長按識別二維碼

關注微軟中國MSDN

2c6b733f2510ad16a37e00ac95cdb4d2.gif

點擊「閱讀原文」了解更多~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284087.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284087.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284087.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【GlobalMapper精品教程】036:基于DEM的流域計算生成流域圖

Globalmapper基于DEM的流域計算生成流域圖教程。 文章目錄一、加載DEM二、流域分析一、加載DEM 加載配套實驗數據。 二、流域分析 GM中的流域分析工具位于分析→生成流域&#xff0c;如下所示&#xff1a; 參數設置如下&#xff1a; 流域計算結果&#xff1a;

html之file標簽 --- 圖片上傳前預覽 -- FileReader

記得以前做網站時&#xff0c;曾經需要實現一個圖片上傳到服務器前&#xff0c;先預覽的功能。當時用html的<input type"file"/>標簽一直實現不了&#xff0c;最后舍棄了這個標簽&#xff0c;使用了其他方式來實現了這個功能。 今天無意發現了一個知識點&#…

Android Studio3.0簡介

Android Studio 3.0.0 Android Studio 3.0.0 (2017年10月)是一個主要版本&#xff0c;包括各種新功能和改進 Android插件的Gradle 3.0.0 ? 支持Android 8.0 ? 支持Java 8庫和Java 8語言功能&#xff08;沒有Jack編譯器&#xff09; ? 支持Android測試支持庫1.0&#xff08;A…

嵌入式linux面試題解析(二)——C語言部分三

嵌入式linux面試題解析&#xff08;二&#xff09;——C語言部分三1、下面的程序會出現什么結果#include <stdio.h>#include <stdlib.h>#include <string.h>void getmemory(char *p){ p(char *) malloc(100); strcpy(p,”hello world”);}int main( ){…

什么是JavaBean、Bean? 什么是POJO、PO、DTO、VO、BO ? 什么是EJB、EntityBean?

前言&#xff1a; 在Java開發中經常遇到這些概念問題&#xff0c;有的可能理解混淆&#xff0c;有的可能理解不到位&#xff0c;特此花了很多時間理順了這些概念。不過有些概念實際開發中并沒有使用到&#xff0c;可能理解還不夠準確&#xff0c;只能靠后續不斷糾正了。 1、什么…

【GlobalMapper精品教程】037:構建泰森多邊形(Thiessen Polygon)實例精解

泰森多邊形是進行快速插值和分析地理實體影響區域的常用工具。例如,用離散點的性質描述多邊形區域的性質,用離散點的數據計算泰森多邊形區域的數據。泰森多邊形可用于定性分析、統計分析和臨近分析等。 文章目錄 一、泰森多邊形的概念二、泰森多邊形的特點三、泰森多邊形構建…

WPF 實現 Gitee 泡泡菜單「完」

WPF 實現 Gitee 泡泡菜單「完」氣泡菜單「完」作者&#xff1a;WPFDevelopersOrg原文鏈接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40&#xff1b;Visual Studio 2022;項目使用 MIT 開源許可協議&#xff1b;需要實現泡泡菜單需…

BZOJ 4516: [Sdoi2016]生成魔咒 [后綴自動機]

4516: [Sdoi2016]生成魔咒 題意&#xff1a;詢問一個字符串每個前綴有多少不同的子串 做了一下SDOI2016R1D2&#xff0c;題好水啊隨便AK 強行開map上SAM 每個狀態的貢獻就是\(Max(s)-Min(s)1\) 插入的時候維護一下就行了 #include <iostream> #include <cstdio> #i…

Fiddler抓包5-接口測試(Composer)

前言 Fiddler最大的優勢在于抓包&#xff0c;我們大部分使用的功能也在抓包的功能上&#xff0c;fiddler做接口測試也是非常方便的。 對應沒有接口測試文檔的時候&#xff0c;可以直接抓完包后&#xff0c;copy請求參數&#xff0c;修改下就可以了。 一、Composer簡介 點開右側…

【GlobalMapper精品教程】038:模擬水位上升(洪水淹沒分析)案例教程

基于數字高程模型 ( DEM )格網模型,實現給定水深情況下洪水淹沒區的計算模型,討論洪水淹沒演進過程可視化實現的關鍵技術,以三維可視化方式,動態而形象地模擬在指定洪水水位下的洪水淹沒演進過程。 文章目錄 一、洪水淹沒效果二、洪水淹沒實現三、查詢淹沒區域面積參考教程…

【.NET6+Avalonia】開發支持跨平臺的仿WPF應用程序以及基于ubuntu系統的演示

前言&#xff1a;隨著跨平臺越來越流行&#xff0c;.net core支持跨平臺至今也有好幾年的光景了。但是目前基于.net的跨平臺&#xff0c;大多數還是在使用B/S架構的跨平臺上&#xff1b;至于C/S架構&#xff0c;大部分人可能會選擇QT進行開發&#xff0c;或者很早之前還有一款M…

SOA架構和MSA架構之間的關系

目錄 一、傳統架構&#xff1a;簡單單體模式 二、分布式架構&#xff1a;面向服務架構&#xff08;SOA&#xff09; 1、服務與SOA 2、SOA戰略 3、SOA的兩大基石&#xff1a;RPC和MQ 三、分布式架構&#xff1a;微服務架構&#xff08;MSA&#xff09; 什么是微服務 微服…

Linux系統文件與目錄權限管理

Linux文件目錄權限管理 一、Linux文件屬性及權限 1、Linux文件及目錄權限及屬性說明 &#xff08;1&#xff09;權限及屬性說明 &#xff08;2&#xff09;文件權限說明 三種權限說明&#xff1a;r 讀 read w 寫 write x 執行 excute 2、修改文件屬主及屬組 &#xff08;1&am…

一個文本分詞程序

WordMap類從分詞庫中讀入分詞 將分詞存入unordered_map<std::string, int> 中 #pragma once #include<istream> #include<unordered_map> #include<string> #include<ctime> class WordMap { public:WordMap(const std::string& filename);…

scala學習手記28 - Execute Around模式

我們訪問資源需要關注對資源的鎖定、對資源的申請和釋放&#xff0c;還有考慮可能遇到的各種異常。這些事項本身與代碼的邏輯操作無關&#xff0c;但我們不能遺漏。也就是說進入方法時獲取資源&#xff0c;退出方法時釋放資源。這種處理就進入了Execute Around模式的范疇。 在s…

【時序數據庫InfluxDB】Windows環境下配置InfluxDB+數據可視化,以及使用 C#進行簡單操作的代碼實例...

前言&#xff1a;如題。直接上手擼&#xff0c;附帶各種截圖&#xff0c;就不做介紹了。1、influxDB的官網下載地址 https://portal.influxdata.com/downloads/打開以后&#xff0c;如下圖所示&#xff0c;可以選擇版本號&#xff0c;以及平臺。此處咱們選擇windows平臺。不過…

官宣 微軟跨平臺 UI 框架 .NET MAUI 6 正式發布

微軟宣布 .NET MAUI 已正式 GA。 .NET MAUI (.NET Multi-platform App UI) 是一個跨平臺 UI 框架&#xff08;前身是 Xamarin.Forms&#xff09;&#xff0c;用于通過 C# 和 XAML 創建原生移動和桌面應用。基于 .NET MAUI&#xff0c;開發者可在單個共享代碼庫中創建同時支持 A…

92. Reverse Linked List II

Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1->2->3->4->5->NULL, m 2 and n 4, return 1->4->3->2->5->NULL. Note:Given m, n satisfy the following condition:1 ≤ m ≤ n ≤ lengt…

Reset

在常用的代碼中&#xff0c;我們使用AddForm.form.reset();或者AddForm.getForm().reset();來將FormPanel重置。 但是當頁面增加和修改公用一個formpanel時&#xff0c;當先點擊修改時&#xff0c;窗體修改顯示出數據&#xff0c;關閉窗體后&#xff08;window.hide()&#xff…

《.NET物聯網從零開始》系列

近日搞硬件網關時&#xff0c;那些殘存的數電、模電和通信原理的記憶時常在腦海中縈繞&#xff1b;想起來多年前看張高興的博客學會了.netcore樹莓派進行物聯網開發。使用dragonboard(龍板)搭載windows 10 iot系統&#xff0c;配合光電傳感器和rfid實現了一個項目原型。碰巧逛g…