开源WPF控件库-AdonisUI

原文:https://github.com/benruehl/adonis-ui

翻译:沙漠尽头的狼(谷歌翻译加持)

用于 WPF 应用程序的轻量级 UI 工具包,提供经典和增强的 Windows 视觉效果:

89945dcdb96ced5535ee2b2f42431d13.gif

仓库信息

  • 仓库地址:https://github.com/benruehl/adonis-ui

  • Demo:https://github.com/benruehl/adonis-ui#demo

048001b503b1708212052bbd1c143fab.png

有哪些内容?

  1. 几乎所有 WPF 控件的默认样式和模板

  2. 可根据需要使用的其他样式以方便使用

  3. 两种配色方案(浅色和深色)也可用于自定义样式

  4. 支持在运行时更改配色方案

  5. 支持其他自定义配色方案

  6. 内置控件的扩展,提供水印等功能

  7. 常见用例的自定义控件很少

设计原则

  1. 保持接近 WPF 的原始外观

  2. 不需要任何配置,但为想要控制全局和个人行为的人提供选项

  3. 支持 WPF 对创建新控件的内置控件的扩展,以便成为现有应用程序的直接替代品

文档

使用文档地址:https://benruehl.github.io/adonis-ui/docs/getting-started/introduction/

开始吧

  1. 在您的项目中引用AdonisUIAdonisUI.ClassicTheme。可通过NuGet[1]或手动下载[2]获得。目前它至少需要 .NET Framework 4.5.NET Core 3.0

Install-Package AdonisUI.ClassicTheme -Version 1.17.1
  1. 像这样将资源添加到您的应用程序App.xaml中:

<Application xmlns:adonisUi="clr-namespace:AdonisUI;assembly=AdonisUI"><Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="pack://application:,,,/AdonisUI;component/ColorSchemes/Light.xaml"/><ResourceDictionary Source="pack://application:,,,/AdonisUI.ClassicTheme;component/Resources.xaml"/></ResourceDictionary.MergedDictionaries></ResourceDictionary></Application.Resources>
</Application>
  1. 从 Adonis UI 的默认样式派生窗口样式,如下所示:

<Window.Style><Style TargetType="Window" BasedOn="{StaticResource {x:Type Window}}"/>
</Window.Style>

控件特色

在运行时切换配色方案

Adonis UI 带有浅色和深色配色方案。可以不受限制地添加自定义配色方案。

浅色方案深色方案 Scheme
7bd6bee37413c22341dea36aadb201cc.gif290cbafbb8abe9ee9058c8fde059cc09.gif

要在运行时切换配色方案,ResourceDictionary需要从应用程序资源中删除包含方案的所有颜色和画笔,以便可以添加不同的配色方案。这可以使用内置ResourceLocator类来完成,例如在单击事件处理程序中。

AdonisUI.ResourceLocator.SetColorScheme(Application.Current.Resources, ResourceLocator.DarkColorScheme);

第一个参数必须是对ResourceDictionary包含配色方案的引用,作为其MergedDictionaries。第二个参数是应添加的配色方案的 Uri。

阅读有关切换配色方案的更多信息[3]

强调色

在依赖于背景区域和边框的统一颜色的同时,强调色可用于视觉突出重要点。默认情况下,两种配色方案都使用蓝色作为强调色。这可以通过覆盖强调色值来改变。一组样式有助于在强调色上显示按钮等控件。

关于颜色和画笔的信息[4]

自定义窗口标题栏

Adonis UI 带来了一个自定义窗口标题栏,默认情况下看起来与 Windows 10 标题栏一模一样,但有几个优点。首先,它尊重当前的配色方案,因此在切换到深色配色方案时它会变暗。其次,它的颜色也可以独立于颜色方案设置,例如通过绑定和触发器。第三,它的内容可以很容易地定制,例如通过隐藏图标、添加额外的按钮或在其中放置标签。派生您的窗口AdonisWindow以接收这些功能。



d24e54caad52f6a97efbb7713a74e569.pngb0aeb2be5fcf93dfe920cfa6c479d78b.png
70980b2d99128f732849e092dc734117.pngc5872c27f3c46205122513847c3b5b78.png

阅读有关窗体的更多信息[5]

光标聚光灯悬停效果(Cursor Spotlight hover effect)

依赖交互的 UI 控件(如按钮、文本框、组合框、列表框等)在此处使用称为 Cursor Spotlight 的悬停效果。当将鼠标悬停在隐藏的控件上时,它会使光标周围的图层可见。它适用于两种配色方案。

浅色方案深色方案 Scheme
0aff5475de62470eca49c254efe9ed45.gif38c1c226ed616b4cbbae95b592055f3a.gif

因为它与OpacityMasks一起作用不仅限于照亮 UI 控件。它可以用来隐藏几乎所有可以用 WPF 渲染的东西。

阅读有关光标聚光灯效果的更多信息[6]

连锁反应(Ripple effect)

默认情况下,按钮和 ContextMenuItem 在单击时会显示涟漪效果。ListBoxItems 也支持它,但默认情况下禁用它。

浅色方案深色方案 Scheme
299399b981a043fbdc852fdb9272feb6.gif6dd6c1817b55b00f0acbe4243844fa47.gif

阅读有关涟漪效应的更多信息[7]

图层

在 UI 设计中,容器将属于一起的项目分组是很常见的。例如,在 WPF 中,这可以使用 GroupBoxes 轻松实现。如果容器分配了不同的背景颜色以更好地区分分组项目及其周围环境,则颜色对比可能会成为问题。灰色按钮最初在白色应用程序背景上可能看起来不错,但是当它们被移动到也具有灰色背景的 GroupBox 中时,它们可能会失去可见性。

这就是为什么 Adonis UI 引入了一个简单的分层系统,它可以根据 UI 控件所属的层自动调整 UI 控件的颜色。默认情况下,所有样式的 Adonis UI 都会自动适应系统,但也可以禁用它。

浅色方案深色方案 Scheme
d3e4e4bd104ecdf5b7078dc3dc77cfab.png00f81260134710205dfdc5de50c75e68.png

这些图像显示了一个由 Buttons 和 GroupBoxes 组成的简单布局。所有控件都使用它们的默认样式,除了它们的内容之外没有设置任何属性。分层系统负责稍微调整每层按钮的颜色和 GroupBoxes 的背景。它确保容器的背景和容器中控件的背景始终存在差异。如果没有系统,所有按钮都将具有完全相同的背景颜色。

该系统是完全可定制的。当然,它适用于所有控件,而不仅仅是按钮。每个控件都可以配置为为其子级增加层,但默认情况下已经为某些控件(如 GroupBoxes)启用它。控件也可以强制驻留在特定层上。

阅读有关分层系统的更多信息[8]

数据验证支持

WPF 的数据验证机制提供了验证属性值并在它们无效时分配错误消息的能力。在 Adonis UI 中,如果控件绑定到无效属性,则错误会在控件模板中由红色边框和错误图标指示。当控件获得键盘焦点或用户将鼠标悬停在图标上时,错误消息将显示为弹出窗口。要设置验证错误,可以使用接口IDataErrorInfoWPF

浅色方案深色方案 Scheme
9b8b0a41f3fe92bec0b77ab95baa6c05.png8f506138ccb244118fabaed654c31d19.png

默认情况下,错误消息弹出窗口显示在键盘焦点和鼠标悬停上。两者都可以单独禁用。

阅读有关数据验证的更多信息[9]

ComponentResourceKeys

Adonis UI 提供的资源具有分配的 ComponentResourceKey,以便以简单的方式使用它们。资源存在于颜色、画笔、尺寸、样式、模板和图标等类别中。例如,当前配色方案的前景画笔可以通过引用其资源键来使用,如Foreground="{DynamicResource {x:Static adonisUi:Brushes.ForegroundBrush}}"ComponentResourceKeys 允许使用 IntelliSense 自动完成,这在探索可用资源时会派上用场。

阅读有关资源的更多信息[10]

Space

控件之间的Space通常由边距、填充和网格行和列控制。为了确保每个位置的Space一致,可以选择一个固定的大小,在任何地方都使用(或它的倍数)。Adonis UI 提供了一个支持您这样做的系统。默认情况下,空间的基值为8,但可以分别针对水平和垂直空间进行调整。

可以像这样应用空间:

<RowDefinition Height="{adonisUi:Space 1}"/> <!-- equals Height="8" -->
<RowDefinition Height="{adonisUi:Space 2.5}"/> <!-- equals Height="20" -->
<RowDefinition Height="{adonisUi:Space 2.5+1}"/> <!-- equals Height="21" -->
<RowDefinition Height="{adonisUi:Space 2.5-1}"/> <!-- equals Height="19" -->

同样适用于边距和填充等厚度:

<Button Margin="{adonisUi:Space 1}"/> <!-- equals Margin="8,8,8,8" -->
<Button Margin="{adonisUi:Space 1, 2}"/> <!-- equals Margin="8,16,8,16" -->
<Button Margin="{adonisUi:Space 1, 1+2, 2, 3}"/> <!-- equals Margin="8,10,16,24" -->

阅读有关空间的更多信息[11]

演示

板上有一个 WPF 演示应用程序,它显示了 Adonis UI 的大部分功能。请不要犹豫,试一试。

在这里下载[12]

License

MIT © Benjamin Rühl

参考

  • AdonisUI - 用于 WPF 应用程序的轻量级 UI 工具包,提供经典但增强的 Windows 视觉效果[13]

参考资料

[1]

NuGet: https://www.nuget.org/packages/AdonisUI.ClassicTheme/

[2]

手动下载: https://github.com/benruehl/adonis-ui/releases

[3]

阅读有关切换配色方案的更多信息: https://benruehl.github.io/adonis-ui/docs/guides/colors-and-brushes/#switching-color-schemes-at-runtime

[4]

关于颜色和画笔的信息: https://benruehl.github.io/adonis-ui/docs/guides/colors-and-brushes/

[5]

阅读有关窗体的更多信息: https://benruehl.github.io/adonis-ui/docs/guides/window/

[6]

阅读有关光标聚光灯效果的更多信息: https://benruehl.github.io/adonis-ui/docs/guides/cursor-spotlight/

[7]

阅读有关涟漪效应的更多信息: https://benruehl.github.io/adonis-ui/docs/guides/ripple/

[8]

阅读有关分层系统的更多信息: https://benruehl.github.io/adonis-ui/docs/guides/layers/

[9]

阅读有关数据验证的更多信息: https://benruehl.github.io/adonis-ui/docs/guides/data-validation/

[10]

阅读有关资源的更多信息: https://benruehl.github.io/adonis-ui/docs/guides/styles-and-templates/

[11]

阅读有关空间的更多信息: https://benruehl.github.io/adonis-ui/docs/guides/space/

[12]

在这里下载: https://github.com/benruehl/adonis-ui/releases/download/1.17/AdonisUI.Demo.zip

[13]

AdonisUI - 用于 WPF 应用程序的轻量级 UI 工具包,提供经典但增强的 Windows 视觉效果: https://mp.weixin.qq.com/s/TaX0PqCci4vMlTdmbLAsCw

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity3D脚本的生命周期(执行顺序)

Unity脚本中有许多固定的函数 例如Start();Update(); 而这些函数都有固定的执行顺序 搞清楚这些函数的执行顺序 对于我们理清代码的逻辑就显得尤为重要 举个简单的例子 //脚本A public static int a 1; void Start(){a 2; }//脚本B void Start(){Debug.Log(A.a); } 这时&…

【ArcGIS微课1000例】0023:ArcGIS将地理照片(无人机照片)转为点(航迹)案例教程

本文演示在ArcGIS中,批量将无人机航测获取的带有地理坐标的照片转为点,形成航线轨迹,并计算出三维坐标,为航测数据内业处理提供一定的基础支持。 1. 效果展示 无人机正射照片: 地理坐标转点(航迹): 2. 工具介绍 在ArcGIS中提供了批量将无人机多张照片自带的地理坐标转…

《A Seat at the Table》作者访谈录

\本文要点\\CIO&#xff08;首席信息官&#xff09;和IT领导者们必须重新定义他们的IT组织与其他企业之间的关系&#xff0c;只有这样才能利用DevOps带来的敏捷和开发周期的缩短。\\t传统的观点认为&#xff0c;IT部门是“业务”的一个独立承包商&#xff0c;这样的观点阻碍了公…

WPF效果第一百九十二篇之TreeView支持多选

前面一篇文章中玩耍了框选ListBox的效果;今天要分享基于TreeView实现节点得多选操作,最终实现的效果,如下图:1、参考项目:https://github.com/cmyksvoll/MultiSelectTreeView2、我在里面增加了一个路由事件public static readonly RoutedEvent SelectedItemsChangedEvent Even…

【BIM入门实战】Win11平台上Revit 2018_x64简体中文版图文安装与卸载完整教程

Win11平台上Revit 2018_x64简体中文版图文安装与卸载完整版教程。 【扩展阅读】:【BIM】Revit2018项目模板、族库图文安装教程 1. Revit 2018安装 断开网络连接,双击软件安装包中的Revit_2018_G1_Win_64bit_dlm_001_003.sfx.exe进行安装。 选择默认的目标文件夹,安装完成后…

[转]Xdebug----Failed loading

环境说明&#xff1a; 1、php7.2.1 2、php.ini配置 [Zend] zend_extensionD:\work-Doc\wiki\php-7.2.11-Win32-VC15-x64\ext\php_xdebug-2.6.1-7.2-vc15-x86_64.dll xdebug.remote_port9000 xdebug.remote_enable1 xdebug.remote_host127.0.0.1 xdebug.remote_handlerd…

【BIM入门实战】Revit 2018模型设计阶段重点及注意事项总结

1、最常用的三个快捷指令:对齐AL、尺寸标注DI、可见性设置VV; 2、进行新项目的创建,需要根据不同的项目类型,选择不同的样板文件,例如:创建的是建筑模型就需要选择 “建筑样板”,而结构模型就需要选择 “结构样板”,也可以选择自己设置的样板文件; 3、CAD优化处理后每…

用状态机STATE MACHINE实现有选择的文件转换

用书上的例子实现在解析HTML文本时&#xff0c;对"<>"中的符号不进行字符转换。 import sys import string from optparse import OptionParserCHAR_MAP dict(zip(string.ascii_lowercase,string.ascii_lowercase[13:26] string.ascii_lowercase[0:13]) )cla…

正式发布丨VS Code 1.69

点击上方蓝字关注我们&#xff08;本文阅读时间&#xff1a;4分钟)欢迎来到 Visual Studio Code 6月更新&#xff01;本次更新主要亮点如下&#xff1a;▌3 way merge editor在这个版本中&#xff0c;我们继续开发 3 way merge editor。可以通过将 git.mergeEditor 设置为 true…

Codeforces Round #450 (Div. 2)D. Unusual Sequences[数论][组合数学][dp II]

题目&#xff1a;http://codeforces.com/contest/900/problem/D 题意&#xff1a;找到加和为m的且gcd为n的数列种类数 分析&#xff1a;可以转化为求gcd为1的加和为m/n的种类数&#xff0c;假设有m/n个1&#xff0c;则除了第一个以外的每个1可以选择和前面一项合并&#xff0c;…

css_oneday

css css概述&#xff1a; css全称Cascading Style Sheets &#xff1a;层叠样式表&#xff0c;用于控制网页的样式和布局。 css的四种引入方式 1.行内式 行内式是在标记的style属性中设定CSS样式。这种方式没有体现出CSS的优势&#xff0c;不推荐使用。 <body><p styl…

【BIM入门实战】Revit 2018墙体绘制—别墅地下室

别墅地下室绘制效果: 设置墙体显示模式: 本文需要绘制的墙体包括:200mm外墙、200mm内墙和100mm内墙。 1. 外墙(200mm)绘制 点击【建筑】选项卡→点击【墙:结构】。 选择直线绘制工具,设置参数如下:

供应链攻击日益严重,微软开源 SBOM 生成工具 Salus

Software Package Data Exchange&#xff08;SPDX&#xff09;规范作为ISO/IEC 5962:2021发布&#xff0c;被认定为安全性、许可合规和其他软件供应链构件领域的国际开放标准。ISO/IEC JTC 1是一个独立的非政府标准机构。包括英特尔、微软、西门子、索尼、新思科技、VMware和Wi…

【BIM入门实战】建筑墙体知识全攻略

墙体是建筑重要构成部分,墙体的主要作用就是承重、围护、分割。所以,稳定、保温、隔热、隔声这些是基本要求。 一、墙体分类 1. 墙体依其在房屋所处位置的不同,有内墙、外墙、其他墙之分 (1)外墙:凡位于建筑物外界的墙称为外墙。外墙是房屋的外围护结构,起着挡风、阻雨…

2012 Multi-University #8

DP单调队列优化 E One hundred layer 题意&#xff1a;&#xff4e;&#xff0a;&#xff4d;的矩形&#xff0c;从第一层&#xff58;位置往下走&#xff0c;每一层都可以往左或往右移动最多&#xff4b;步再往下走&#xff0c;问走到&#xff4e;层时所走路径的最大值&#x…

【BIM入门实战】Revit 2018幕墙的绘制与注意事项

一、幕墙概述 1. 定义 幕墙是建筑的外墙围护&#xff0c;不承重&#xff0c;像幕布一样挂上去&#xff0c;是现代大型和高层建筑常用的带有装饰效果的轻质墙体。由面板和支承结构体系组成的&#xff0c;可相对主体结构有一定位移能力或自身有一定变形能力、不承担主体结构所作…

【BIM入门实战】Revit 图元分类有哪三种?Revit图元分类图文详解

Revit在项目中使用3种类型的图元:模型图元、基准图元和视图专有图元。 Revit中的图元也称为族。族包含图元的几何定义和图元所使用的参数。图元的每个实例都由族定义和控制。 1. 模型图元 模型图元表示建筑的实际三维几何图形,包括如下:墙、窗、门和屋顶,结构墙、楼板、坡…

跟益达学Solr5之solrconfig.xml配置详解

solrconfig.xml配置文件中包含了很多solr自身配置相关的参数,solrconfig.xml配置文件示例可以从solr的解压目录下找到&#xff0c;如图&#xff1a; 用文本编辑软件打开solrconfig.xml配置&#xff0c;你将会看到以下配置内容&#xff1a; Xml代码 <?xml version"1.…

.NET 7 新增速率限制 (Rate Limiting) 功能,轻松限制请求数量

前言.NET 7 内置了速率限制&#xff08;Rate Limiting&#xff09;功能&#xff0c;速率限制指的是限制可访问资源的请求数。例如数据库每分钟可以安全处理 1000 个请求&#xff0c;再多不确定会不会崩。这时就可以在应用程序中放一个速率限制器&#xff0c;规定每分钟只允许 …

Linux Tomcat8 启动堆内存溢出

今天在部署一个开源项目的时候&#xff0c;Tomcat8启动异常&#xff0c;报错信息&#xff1a; Exception in thread "RMI TCP Connection(idle)" java.lang.OutOfMemoryError: PermGen space 根据报错信息我们可以看出是堆内存不够。所以需要手动设置堆内存大小&…