国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

現(xiàn)代WPF界面輕松實現(xiàn):探秘輕量級WPFUI庫,MVVM與依賴注入一體化

這篇具有很好參考價值的文章主要介紹了現(xiàn)代WPF界面輕松實現(xiàn):探秘輕量級WPFUI庫,MVVM與依賴注入一體化。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

現(xiàn)代WPF界面輕松實現(xiàn):探秘輕量級WPFUI庫,MVVM與依賴注入一體化

?

概述:一款名為WPFUI的輕量級開源庫,為WPF應用程序提供現(xiàn)代化界面。支持MVVM和
Microsoft.Extensions.DependencyInjection,簡單上手。無第三方依賴,內(nèi)置兩套皮膚,可自定義樣式。適用于一般應用場景,不受MVVM框架限制。通過簡單的引用和配置,快速構建現(xiàn)代化WPF應用,提升用戶體驗

最近要做個小工具軟件,發(fā)現(xiàn)以前用的WPF界面有點老了,所以在網(wǎng)上找下,發(fā)現(xiàn)一個用起來還可以的WPFUI庫,MVVM也支持得很好,同時支持微軟官方的依賴注入框架
Microsoft.Extensions.DependencyInjection。

先來看看運行效果:

現(xiàn)代WPF界面輕松實現(xiàn):探秘輕量級WPFUI庫,MVVM與依賴注入一體化

?

使用方法也比較簡單

1、引用庫:

現(xiàn)代WPF界面輕松實現(xiàn):探秘輕量級WPFUI庫,MVVM與依賴注入一體化

?

2、App.xaml引入資源

<Application
    x:Class="DesktopApp.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
    DispatcherUnhandledException="OnDispatcherUnhandledException"
    Exit="OnExit"
    Startup="OnStartup">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ui:ThemesDictionary Theme="Dark" />
                <ui:ControlsDictionary />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

3、App.xaml.cs注冊相關的Page、ViewModel、Service

    public partial class App
    {
        // The.NET Generic Host provides dependency injection, configuration, logging, and other services.
        // https://docs.microsoft.com/dotnet/core/extensions/generic-host
        // https://docs.microsoft.com/dotnet/core/extensions/dependency-injection
        // https://docs.microsoft.com/dotnet/core/extensions/configuration
        // https://docs.microsoft.com/dotnet/core/extensions/logging
        private static readonly IHost _host = Host
            .CreateDefaultBuilder()
            .ConfigureAppConfiguration(c => { c.SetBasePath(Path.GetDirectoryName(Assembly.GetEntryAssembly()!.Location)); })
            .ConfigureServices((context, services) =>
            {
                services.AddHostedService<ApplicationHostService>();

                services.AddSingleton<MainWindow>();
                services.AddSingleton<MainWindowViewModel>();
                services.AddSingleton<INavigationService, NavigationService>();
                services.AddSingleton<ISnackbarService, SnackbarService>();
                services.AddSingleton<IContentDialogService, ContentDialogService>();

                services.AddSingleton<DashboardPage>();
                services.AddSingleton<DashboardViewModel>();
                services.AddSingleton<DataPage>();
                services.AddSingleton<DataViewModel>();
                services.AddSingleton<SettingsPage>();
                services.AddSingleton<SettingsViewModel>();
            }).Build();

        /// <summary>
        /// Gets registered service.
        /// </summary>
        /// <typeparam name="T">Type of the service to get.</typeparam>
        /// <returns>Instance of the service or <see langword="null"/>.</returns>
        public static T GetService<T>()
            where T : class
        {
            return _host.Services.GetService(typeof(T)) as T;
        }

        /// <summary>
        /// Occurs when the application is loading.
        /// </summary>
        private void OnStartup(object sender, StartupEventArgs e)
        {
            _host.Start();
            Wpf.Ui.Appearance.Theme.Apply(Wpf.Ui.Appearance.ThemeType.Dark);
        }

        /// <summary>
        /// Occurs when the application is closing.
        /// </summary>
        private async void OnExit(object sender, ExitEventArgs e)
        {
            await _host.StopAsync();

            _host.Dispose();
        }

        /// <summary>
        /// Occurs when an exception is thrown by an application but not handled.
        /// </summary>
        private void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
        {

            // For more info see https://docs.microsoft.com/en-us/dotnet/api/system.windows.application.dispatcherunhandledexception?view=windowsdesktop-6.0
        }

4、MainWindow頁面進行主界面布局

這個代碼有點多就不粘了,文章結尾有源代碼下載,如果感興趣可以下載看看。

5、ViewModel、Service的定義

...

6、優(yōu)點

  1. 這個庫包含了一些常用的控件沒有過多的封裝(輕量級),但足夠一般應用場景使用
  2. 包含了兩套皮膚(如果不滿意可以自定義樣式個性色調(diào))
  3. 沒有其它第三方的依賴,使用起來比較簡單
  4. 使用官方Microsoft.Extensions.DependencyInjection作為依賴注入框架,也可以使用其他的
  5. 沒有MVVM框架的限制,可以使用CommunityToolkit.Mvvm、Prism或其他的

再附上幾張效果圖:

現(xiàn)代WPF界面輕松實現(xiàn):探秘輕量級WPFUI庫,MVVM與依賴注入一體化

?

現(xiàn)代WPF界面輕松實現(xiàn):探秘輕量級WPFUI庫,MVVM與依賴注入一體化

?

現(xiàn)代WPF界面輕松實現(xiàn):探秘輕量級WPFUI庫,MVVM與依賴注入一體化

?

現(xiàn)代WPF界面輕松實現(xiàn):探秘輕量級WPFUI庫,MVVM與依賴注入一體化文章來源地址http://www.zghlxwxcb.cn/news/detail-777118.html

到了這里,關于現(xiàn)代WPF界面輕松實現(xiàn):探秘輕量級WPFUI庫,MVVM與依賴注入一體化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 一個現(xiàn)代化輕量級的跨平臺Redis桌面客戶端

    大家好,我是 Java陳序員 。 Redis 作為一款高性能的非關系型數(shù)據(jù)庫,可是深受開發(fā)者的喜愛,無論是什么開發(fā),都能看到 Redis 的身影。 今天,給大家介紹一款跨平臺的 Redis 客戶端連接工具,功能強大,界面美觀! 關注微信公眾號:【Java陳序員】,獲取開源項目分享、AI副

    2024年04月08日
    瀏覽(91)
  • 輕量級報表解決方案Telerik Reporting,輕松完成嵌入式報表交互!

    輕量級報表解決方案Telerik Reporting,輕松完成嵌入式報表交互!

    開發(fā)者可以通過多種方式與集成在應用程序中的Telerik報表進行交互,從“只是閱讀它”到更改報表中包含的數(shù)據(jù)。 但是要注意:開發(fā)者所能做的一些事情將取決于報表是如何創(chuàng)建的,以及它是如何嵌入到應用程序UI中的。因此(和任何應用程序一樣),為了從Telerik報表中獲得想

    2024年02月08日
    瀏覽(21)
  • 鴻蒙開發(fā)實例|構建輕量級智能穿戴設備用戶界面

    鴻蒙開發(fā)實例|構建輕量級智能穿戴設備用戶界面

    HarmonyOS提供了輕量級智能穿戴應用開發(fā),開發(fā)者可以在運動手表上開發(fā)跨設備協(xié)同工作的應用,如從與之匹配的智能手機、平板等各類設備上獲取信息,便捷地顯示在運動手表上,或通過對運動手表的操作來控制其他設備上的操作任務,為消費者帶來更加靈活、智慧的分布式

    2024年02月03日
    瀏覽(93)
  • 掘力計劃第 20 期: Pake —— 利用 Rust 輕松構建跨端輕量級應用

    在掘力計劃系列活動第20場 , 前端工程師 Tw93(真名湯威)分享了跨端開發(fā)與跨端技術實踐。 湯威是一名主職前端、愛折騰的前端開發(fā)者,除了前端之外他對后端和客戶端技術皆有涉獵,并且是 Pake / 妙言 / 潮流周刊 / XRender / Weex Ui 的作者。 本期湯威帶來的是跨端技術相關內(nèi)

    2024年02月13日
    瀏覽(18)
  • 輕量級web開發(fā)框架Flask本地部署及無公網(wǎng)ip遠程訪問界面

    輕量級web開發(fā)框架Flask本地部署及無公網(wǎng)ip遠程訪問界面

    本篇文章講解如何在本地安裝Flask,以及如何將其web界面發(fā)布到公網(wǎng)上并進行遠程訪問。 Flask是目前十分流行的web框架,采用Python編程語言來實現(xiàn)相關功能。較其他同類型框架更為靈活、輕便、安全且容易上手。它可以很好地結合MVC模式進行開發(fā),開發(fā)人員分工合作,小型團

    2024年02月04日
    瀏覽(87)
  • 一種輕量級定時任務實現(xiàn)

    現(xiàn)在市面上有各式各樣的分布式定時任務,每個都有其獨特的特點,我們這邊的項目因為一開始使用的是分布式開源調(diào)度框架TBSchedule,但是這個框架依賴ZK, 由于ZK的不穩(wěn)定性和項目老舊無人維護 ,導致我們的定時任務會偶發(fā)出現(xiàn)異常,比如:任務停止、任務項丟失、任務不

    2024年02月14日
    瀏覽(96)
  • 一種輕量級websocket實現(xiàn)方案

    定義ws服務器工具類WsktUtil 開機啟動ws服務器 測試結果 自定義一個WebSocketClient子類 測試連接ws服務器 測試效果

    2024年02月15日
    瀏覽(21)
  • 使用es實現(xiàn)輕量級分布式鎖

    一般來說,實現(xiàn)分布式鎖的方式有哪幾種? 一:Redisson實現(xiàn) 二:ZK實現(xiàn) ??這兩種實現(xiàn)網(wǎng)上的實現(xiàn)是千篇一律,在本文就不做過多的講解了 ??其它方式好像沒有了,真的是這樣么? ??答案是否定的,今天我就給大家分享一個新的思路,使用es實現(xiàn)一個分布式鎖,分布式

    2024年02月06日
    瀏覽(103)
  • 輕量級軟件FastGithub實現(xiàn)穩(wěn)定訪問github

    輕量級軟件FastGithub實現(xiàn)穩(wěn)定訪問github

    當我們想訪問全球最大的“同性交友網(wǎng)站”https://github.com/ 時,總會出現(xiàn)無法訪問的界面,令人非??鄲溃?幸運的是,有一種輕量級的軟件可以幫助我們穩(wěn)定地訪問GitHub,那就是FastGithub。 FastGithub是一個簡潔且專一的軟件,它可以幫助你穩(wěn)定地訪問GitHub。FastGithub通過修改本地

    2024年02月06日
    瀏覽(19)
  • Spring Boot整合Postgres實現(xiàn)輕量級全文搜索

    Spring Boot整合Postgres實現(xiàn)輕量級全文搜索

    有這樣一個帶有搜索功能的用戶界面需求: 搜索流程如下所示: 這個需求涉及兩個實體: “評分(Rating)、用戶名(Username)”數(shù)據(jù)與 User 實體相關 “創(chuàng)建日期(create date)、觀看次數(shù)(number of views)、標題(title)、正文(body)”與 Story 實體相關 需要支持的功能對 User

    2024年02月19日
    瀏覽(91)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包