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

这篇具有很好参考价值的文章主要介绍了现代WPF界面轻松实现:探秘轻量级WPFUI库,MVVM与依赖注入一体化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

 

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

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

先来看看运行效果:

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

 

使用方法也比较简单

1、引用库:

现代WPF界面轻松实现:探秘轻量级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、优点

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

再附上几张效果图:

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

 

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

 

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

 

现代WPF界面轻松实现:探秘轻量级WPFUI库,MVVM与依赖注入一体化文章来源地址https://www.toymoban.com/news/detail-777118.html

到了这里,关于现代WPF界面轻松实现:探秘轻量级WPFUI库,MVVM与依赖注入一体化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一个现代化轻量级的跨平台Redis桌面客户端

    大家好,我是 Java陈序员 。 Redis 作为一款高性能的非关系型数据库,可是深受开发者的喜爱,无论是什么开发,都能看到 Redis 的身影。 今天,给大家介绍一款跨平台的 Redis 客户端连接工具,功能强大,界面美观! 关注微信公众号:【Java陈序员】,获取开源项目分享、AI副

    2024年04月08日
    浏览(93)
  • 轻量级报表解决方案Telerik Reporting,轻松完成嵌入式报表交互!

    开发者可以通过多种方式与集成在应用程序中的Telerik报表进行交互,从“只是阅读它”到更改报表中包含的数据。 但是要注意:开发者所能做的一些事情将取决于报表是如何创建的,以及它是如何嵌入到应用程序UI中的。因此(和任何应用程序一样),为了从Telerik报表中获得想

    2024年02月08日
    浏览(65)
  • 鸿蒙开发实例|构建轻量级智能穿戴设备用户界面

    HarmonyOS提供了轻量级智能穿戴应用开发,开发者可以在运动手表上开发跨设备协同工作的应用,如从与之匹配的智能手机、平板等各类设备上获取信息,便捷地显示在运动手表上,或通过对运动手表的操作来控制其他设备上的操作任务,为消费者带来更加灵活、智慧的分布式

    2024年02月03日
    浏览(76)
  • 掘力计划第 20 期: Pake —— 利用 Rust 轻松构建跨端轻量级应用

    在掘力计划系列活动第20场 , 前端工程师 Tw93(真名汤威)分享了跨端开发与跨端技术实践。 汤威是一名主职前端、爱折腾的前端开发者,除了前端之外他对后端和客户端技术皆有涉猎,并且是 Pake / 妙言 / 潮流周刊 / XRender / Weex Ui 的作者。 本期汤威带来的是跨端技术相关内

    2024年02月13日
    浏览(43)
  • 轻量级web开发框架Flask本地部署及无公网ip远程访问界面

    本篇文章讲解如何在本地安装Flask,以及如何将其web界面发布到公网上并进行远程访问。 Flask是目前十分流行的web框架,采用Python编程语言来实现相关功能。较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团

    2024年02月04日
    浏览(67)
  • 一种轻量级定时任务实现

    现在市面上有各式各样的分布式定时任务,每个都有其独特的特点,我们这边的项目因为一开始使用的是分布式开源调度框架TBSchedule,但是这个框架依赖ZK, 由于ZK的不稳定性和项目老旧无人维护 ,导致我们的定时任务会偶发出现异常,比如:任务停止、任务项丢失、任务不

    2024年02月14日
    浏览(48)
  • 一种轻量级websocket实现方案

    定义ws服务器工具类WsktUtil 开机启动ws服务器 测试结果 自定义一个WebSocketClient子类 测试连接ws服务器 测试效果

    2024年02月15日
    浏览(41)
  • 使用es实现轻量级分布式锁

    一般来说,实现分布式锁的方式有哪几种? 一:Redisson实现 二:ZK实现   这两种实现网上的实现是千篇一律,在本文就不做过多的讲解了   其它方式好像没有了,真的是这样么?   答案是否定的,今天我就给大家分享一个新的思路,使用es实现一个分布式锁,分布式

    2024年02月06日
    浏览(69)
  • 轻量级软件FastGithub实现稳定访问github

    当我们想访问全球最大的“同性交友网站”https://github.com/ 时,总会出现无法访问的界面,令人非常苦恼: 幸运的是,有一种轻量级的软件可以帮助我们稳定地访问GitHub,那就是FastGithub。 FastGithub是一个简洁且专一的软件,它可以帮助你稳定地访问GitHub。FastGithub通过修改本地

    2024年02月06日
    浏览(49)
  • Spring Boot整合Postgres实现轻量级全文搜索

    有这样一个带有搜索功能的用户界面需求: 搜索流程如下所示: 这个需求涉及两个实体: “评分(Rating)、用户名(Username)”数据与 User 实体相关 “创建日期(create date)、观看次数(number of views)、标题(title)、正文(body)”与 Story 实体相关 需要支持的功能对 User

    2024年02月19日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包