当前位置:首页 > 科技  > 软件

现代WPF界面轻松实现:探秘轻量级WPFUI库,MVVM与依赖注入一体化

来源: 责编: 时间:2024-03-26 09:34:27 296观看
导读概述:一款名为WPFUI的轻量级开源库,为WPF应用程序提供现代化界面。支持MVVM和Microsoft.Extensions.DependencyInjection,简单上手。无第三方依赖,内置两套皮肤,可自定义样式。适用于一般应用场景,不受MVVM框架限制。通过简

NLL28资讯网——每日最新资讯28at.com

概述:一款名为WPFUI的轻量级开源库,为WPF应用程序提供现代化界面。支持MVVM和Microsoft.Extensions.DependencyInjection,简单上手。无第三方依赖,内置两套皮肤,可自定义样式。适用于一般应用场景,不受MVVM框架限制。通过简单的引用和配置,快速构建现代化WPF应用,提升用户体验NLL28资讯网——每日最新资讯28at.com

最近要做个小工具软件,发现以前用的WPF界面有点老了,所以在网上找下,发现一个用起来还可以的WPFUI库,MVVM也支持得很好,同时支持微软官方的依赖注入框架Microsoft.Extensions.DependencyInjection。NLL28资讯网——每日最新资讯28at.com

先来看看运行效果:NLL28资讯网——每日最新资讯28at.com

NLL28资讯网——每日最新资讯28at.com

使用方法也比较简单。NLL28资讯网——每日最新资讯28at.com

1、引用库:

NLL28资讯网——每日最新资讯28at.com

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页面进行主界面布局

这个代码有点多就不粘了,文章结尾有源代码下载,如果感兴趣可以下载看看。NLL28资讯网——每日最新资讯28at.com

5、优点

  • 这个库包含了一些常用的控件没有过多的封装(轻量级),但足够一般应用场景使用
  • 包含了两套皮肤(如果不满意可以自定义样式个性色调)
  • 没有其它第三方的依赖,使用起来比较简单
  • 使用官方Microsoft.Extensions.DependencyInjection作为依赖注入框架,也可以使用其他的
  • 没有MVVM框架的限制,可以使用CommunityToolkit.Mvvm、Prism或其他的

再附上几张效果图:NLL28资讯网——每日最新资讯28at.com

NLL28资讯网——每日最新资讯28at.com

NLL28资讯网——每日最新资讯28at.com

NLL28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-79294-0.html现代WPF界面轻松实现:探秘轻量级WPFUI库,MVVM与依赖注入一体化

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Python 集成测试: 提高软件质量的关键步骤

下一篇: 非Controller控制层参数校验要怎么做

标签:
  • 热门焦点
  • 一加Ace2 Pro真机揭晓 钛空灰配色质感拉满

    终于,在经过了几波预热之后,一加Ace2 Pro的外观真机图在网上出现了。还是博主数码闲聊站曝光的,这次的外观设计还是延续了一加11的方案,只是细节上有了调整,例如新加入了钛空灰
  • 5月iOS设备好评榜:iPhone 14仅排第43?

    来到新的一月,安兔兔的各个榜单又重新汇总了数据,像安卓阵营的榜单都有着比较大的变动,不过iOS由于设备的更新换代并没有那么快,所以相对来说变化并不大,特别是iOS好评榜,老款设
  • Golang 中的 io 包详解:组合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是对Reader和Writer接口的组合,
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 东方甄选单飞:有些鸟注定是关不住的

    文/彭宽鸿编辑/罗卿东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一年多时间里,东方甄选要脱离抖音自立门户的传闻不绝于耳,&ldquo;7
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 华为发布HarmonyOS 4:更好玩、更流畅、更安全

    在8月4日的华为开发者大会2023(HDC.Together)大会上,HarmonyOS 4正式发布。自2019年发布以来,HarmonyOS一直以用户为中心,经历四年多的发展HarmonyOS已
  • 三星折叠屏手机去年销售近1000万台 今年目标定为1500万

    7月29日消息,三星率先发力可折叠手机市场,在全球市场已经取得了非常亮眼的成绩,接下来会进一步巩固和扩大这一优势。三星在推出Galaxy Z Flip5和Galax
  • 联想的ThinkBook Plus下一版曝光,键盘旁边塞个平板

    ThinkBook Plus 是联想的一个特殊笔记本类别,它在封面放入了一块墨水屏,也给人留下了较为深刻的印象。据有人爆料,联想的下一款 ThinkBook Plus 可能更特殊,它
Top