.NET MAUI實戰 FolderPicker

1.概要

最近在遷移 GeneralUpdate.Tool的時候需要用到文件夾選擇,在MAUI中可以使用FolderPicker進行選擇。注意,和上篇文章的文件選擇不一樣。因為在.NET MAUI中目前還沒有傻瓜式直接可用的FolderPicker供開發者使用所以需要自己動手做一些修改。

完整示例代碼:https://gitee.com/Juster-zhu/GeneralUpdate/tree/master/src/c%23/GeneralUpdate.PacketTool

2.詳細內容

實現步驟如下:

  1. 定義接口

56c1b17e82d7296ed36bd11c1d6b0a0d.png

public interface IFolderPickerService{Task<string> PickFolderTaskAsync();}

2.在每個受支持的平臺上實現接口

da90beb1222ed32be7f3a54a9e79d27d.png

using GeneralUpdate.Infrastructure.DataServices.Pick;
using WindowsFolderPicker = Windows.Storage.Pickers.FolderPicker;namespace GeneralUpdate.PacketTool.Platforms.Windows
{public class FolderPicker : IFolderPickerService{public async Task<string> PickFolderTaskAsync(){var folderPicker = new WindowsFolderPicker();// Might be needed to make it work on Windows 10folderPicker.FileTypeFilter.Add("*");// Get the current window's HWND by passing in the Window objectvar hwnd = ((MauiWinUIWindow)App.Current.Windows[0].Handler.PlatformView).WindowHandle;// Associate the HWND with the file pickerWinRT.Interop.InitializeWithWindow.Initialize(folderPicker, hwnd);var result = await folderPicker.PickSingleFolderAsync();return result?.Path;}}
}

3.向.NET MAUI框架容器中注入FolderPicker注冊實現

一定需要記住下面代碼中的這個using引用。

using GeneralUpdate.Infrastructure.DataServices.Pick;

不可以刪除因為加入了環境的判斷會導致在編碼時認為是無效應用,實際運行時會使用到該命名空間。

#if WINDOWSmauiAppBuilder.Services.AddTransient<IFolderPickerService, Platforms.Windows.FolderPicker>();
#elif MACCATALYSTmauiAppBuilder.Services.AddTransient<IFolderPickerService, Platforms.MacCatalyst.FolderPicker>();
#endif

實際代碼如下。

using GeneralUpdate.Infrastructure.DataServices.Pick;
using GeneralUpdate.PacketTool.ViewModels;namespace GeneralUpdate.PacketTool
{public static class MauiProgram{public static MauiApp CreateMauiApp(){var builder = MauiApp.CreateBuilder();builder.UseMauiApp<App>().RegisterViewModels().RegisterView().RegisterAppServices().RegisterOther().ConfigureFonts(fonts =>{fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");});return builder.Build();}public static MauiAppBuilder RegisterOther(this MauiAppBuilder mauiAppBuilder){mauiAppBuilder.Services.AddTransient<App>();return mauiAppBuilder;}public static MauiAppBuilder RegisterView(this MauiAppBuilder mauiAppBuilder){mauiAppBuilder.Services.AddTransient<MainPage>();return mauiAppBuilder;}public static MauiAppBuilder RegisterViewModels(this MauiAppBuilder mauiAppBuilder){mauiAppBuilder.Services.AddTransient<MainViewModel>();return mauiAppBuilder;}public static MauiAppBuilder RegisterAppServices(this MauiAppBuilder mauiAppBuilder){
#if WINDOWSmauiAppBuilder.Services.AddTransient<IFolderPickerService, Platforms.Windows.FolderPicker>();
#elif MACCATALYSTmauiAppBuilder.Services.AddTransient<IFolderPickerService, Platforms.MacCatalyst.FolderPicker>();
#endifreturn mauiAppBuilder;}}
}

4.使用功能

  • 如何使用

將我們剛剛在容器中注入好的FolderPickerService取出來,并初始化ViewModel中的引用。

public class MainViewModel : ViewModeBase{//code...public MainViewModel(IFolderPickerService folderPickerService) {_folderPickerService = folderPickerService;}//code...}

FolderPickerService調用。

/// <summary>/// Choose a path/// </summary>/// <param name="value"></param>private async Task SelectFolderAction(string value){var pickerResult = await _folderPickerService.PickFolderTaskAsync();if (pickerResult == null){await Shell.Current.DisplayAlert("Pick options", "No results were selected !", "ok");return;}switch (value){case "Source":SourcePath = pickerResult;break;case "Target":TargetPath = pickerResult;break;case "Patch":PatchPath = pickerResult;break;}}
  • 運行效果如下

b00ab26290fd68556425249ca360d139.png

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

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

相關文章

h5外賣源碼php_校園食堂外賣APP走紅 更多APP定制開發上一品威客網

近日&#xff0c;西安一高校推出了一款校園食堂外賣APP走紅網絡。該APP涵蓋學校食堂的所有飯菜&#xff0c;并可給該校的師生提供校園食堂飯菜外賣服務。飯菜價格與食堂統一&#xff0c;且僅供該校內的師生使用。 目前開發校園外賣訂餐系統可謂是一個較熱門的創業項目&#xff…

Python面向對象學習 1 (什么是面向對象,面向對象的應用場景,待更新)

程序設計的三種基本結構&#xff1a; 面向對象&#xff0c;面向過程&#xff0c;函數式編程1&#xff0c;什么是面向對象編程 面向對象編程是一種編程方式&#xff0c;此編程方式的落地需要使用 “類” 和 “對象” 來實現&#xff0c;所以&#xff0c;面向對象編程其實就是對 …

iPhone屏幕大小和適配建議(包括 XR XS XSM )

//4 ----:{{0, 0}, {320, 480}} //5、5s ----:{{0, 0}, {320, 568}} //6、6s、7、8 ----:{{0, 0}, {375, 667}} //6P、7P、8P ----:{{0, 0}, {414, 736}} 復制代碼X 系列 //X ----:{{0, 0}, {375, 812}} //XR ----:{{0, 0}, {414, 896}} //XS ----:{{0, 0}, {375, 812}} //XSM …

go語言中的方法method

package main;import "fmt"//重新定義一個類型 //為該INT類型擴展方法 type INT int;type A struct {name string; }type B struct {name string; }func main() {a : A{};a.Print();//指針傳遞a.Print2();fmt.Println(a);//同上(*A).Print2(&a);b : B{};b.Print(…

微信自定義tabbar有小紅點_自定義微信小程序tabBar組件上邊框的顏色

背景&#xff1a;在微信小程序的實際開發過程中&#xff0c;有時候我們需要修改微信小程序提供的 tabBar 組件頂部邊框的顏色&#xff0c;以滿足項目需求解決方案&#xff1a;方式一&#xff1a;通過tabBar組件自帶的 borderStyle 屬性來控制邊框的顏色&#xff0c;將邊框的顏色…

又一批優質.NET6實戰項目,面臨永久下線...

多好的實戰項目大家抓緊時間實操起來呀移動電商實戰這次能上岸&#xff0c;最重要的是這個Vue3VantUI.NET6SqlSugar移動電商實戰&#xff0c;全部都是最新最熱的技術棧&#xff0c;寫上簡歷后面試基本上都是問的這塊兒內容。我先給大家看看項目的UI。項目UI全套實戰源碼這個電商…

laravel 配置微信公眾號時{errcode:-106,errmsg:token check fail}

一、問題描述 做微信授權登錄時&#xff0c;遇到的一個坑&#xff0c;提示配置失敗&#xff0c;F12&#xff0c;響應為 errcode":-106,"errmsg":"token check fail 二、解決方案&#xff1a; 注&#xff1a;宗旨就是讓微信能夠訪問你填寫的網址&#xff…

電商企業怎樣用好大數據

電商企業怎樣用好大數據 大數據正在促生新的藍海&#xff0c;催生新的經濟增長點&#xff0c;正在成為政府和企業競爭的新焦點。2012年&#xff0c;瑞士達沃斯論壇發布《大數據&#xff0c;大影響》報告&#xff0c;稱“數據已經成為一種新的經濟資產類別&#xff0c;就像貨幣或…

ORACLE經常使用系統查詢

&#xfeff;&#xfeff;1 查詢系統全部對象 SELECT OWNER, OBJECT_NAME, OBJECT_TYPE, CREATED, LAST_DDL_TIME, TIMESTAMP, STATUS FROM DBA_OBJECTS WHERE OWNERUPPER(SCOTT) 2 查看系統全部表 SELECT OWNER, TABLE_NAME, TABLESPACE_NAME FROM DBA_TABLES 3 查看全部用…

Safari 版本回退方法

回退條件 版本回退的前提是關閉電腦的SIP機制&#xff0c;命令行 csrutil status 檢測狀態。Mac os 10.14以下版本回退Safari后插件還是可以用的&#xff0c;升了新系統退了也沒法用了。我的是舊系統 SIP關閉方法 1 重啟MAC&#xff0c;按住cmdR直到屏幕上出現蘋果的標志和進度…

同步方法 調用異步防范_Spring一個注解實現方法的異步調用,再也不用單開線程了...

介紹同步調用先來演示一下什么是同步調用測試方法輸出如下doTaskOne start 1566121320372doTaskOne end 1566121321373doTaskTwo start 1566121321373doTaskTwo end 1566121322374可以看到方法一執行完畢&#xff0c;方法二才會執行異步調用不返回值1.Spring Boot啟動類上加Ena…

使用docker搭建redis主從

一、構建 Docker 環境 1、創建 dockerfile FROM centos:latest RUN groupadd -r redis && useradd -r -g redis redis RUN yum -y update && yum -y install epel-release && yum -y install redis && yum -y install net-tools EXPOSE 63…

【源碼探索】.NET中的List,是哪種數據結構

“當你提出疑問并開始思考時&#xff0c;答案就離你不遠了”圖片&#xff1a;奧森公園的向日葵 拍攝于2022年7月23日 攝影師&#xff1a;劉先生01—問題緣起嚴格來說應該是List<T>&#xff0c;因為.NET的核心基礎類庫中&#xff0c;并沒有List&#xff0c;作為泛型類型的…

dpdk對虛擬化的支持調研

目錄&#xff1a; 虛擬化dpdk的實現研究 virtiovhostSR-IOV熱遷移相關研究拓展本文記錄近期對dpdk在虛擬化和云計算領域應用的研究成果&#xff0c;內容梳理如下。 虛擬化 虛擬化&#xff0c;抽象來說&#xff0c;就是將物理資源邏輯化。具體來說&#xff0c;虛擬技術的實現是在…

服務器環境

一 linux 系統搭建Java項目環境 1 環境準備&#xff1a;jdk,tomcat, nginx,reids,mysql jdk:java環境 Tomcat&#xff1a;Java項目服務器 nginx&#xff1a;項目靜態資源&#xff0c;域名解析&#xff08;ssl&#xff09; redis: 項目可能會用到 mysql: 數據庫 環境轉載于:htt…

隱藏鍵盤_三星新專利:帶有隱藏鍵盤的三折疊屏手機

10月31日消息 眾所周知&#xff0c;三星現已推出四款折疊屏機型(Fold、Fold 2、Z Flip、W20)&#xff0c;而此前多有傳言表示三星下一代折疊屏機型(以 Galaxy Z Fold 3 代稱)將在目前折疊屏手機的基礎上增加 S Pen&#xff0c;而昨日公布的一份專利也側面輔證了這一說法。此外&…

Blazor學習之旅(3)實現一個Todo應用

【Blazor】| 總結/Edison Zhou大家好&#xff0c;我是Edison。最近在學習Blazor做全棧開發&#xff0c;因此根據老習慣&#xff0c;我會將我的學習過程記錄下來&#xff0c;一來體系化整理&#xff0c;二來作為筆記供將來翻看。本篇&#xff0c;我們通過一個簡單的Todo示例應用…

JavaScript 省市級聯效果

為什么80%的碼農都做不了架構師&#xff1f;>>> JavaScript 省市級聯效果 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">2 <html xmlns"http…

20分鐘完成Mac上的 LNMP 環境部署,優雅·高效開發(Docker方式)

一、前言 對于很多開發者來說&#xff0c;突然轉到在 mac 系統開發&#xff0c;可能會非常難受&#xff0c;主要有以下幾個原因 1、mac 上安裝軟件程序坑多&#xff0c;比如安裝 PHP、Nginx&#xff0c;會存在很多使用 linux 或 windows 時沒有遇到過的坑 2、對 mac 系統不熟…

可編程交換時代就在這里

在第一批網絡處理器推出20年后&#xff0c;我們正在向完全可編程數據平面邁進&#xff0c;網絡運營商在虛擬化方面的努力推動了這一趨勢的發展。 大多數物理網絡系統正在被運行在網絡核心和邊緣的服務器上的虛擬網絡功能&#xff08;VNF&#xff09;取代。這些服務器一般采用通…