原文:https://github.com/benruehl/adonis-ui
翻譯:沙漠盡頭的狼(谷歌翻譯加持)
用於 wpf 應用程式的輕量級 ui 工具包,提供經典和增強的 windows 視覺效果:

倉庫信息

有哪些內容?
- 幾乎所有 wpf 控制項的默認樣式和模板
- 可根據需要使用的其他樣式以方便使用
- 兩種配色方案(淺色和深色)也可用於自定義樣式
- 支持在運行時更改配色方案
- 支持其他自定義配色方案
- 內置控制項的擴展,提供水印等功能
- 常見用例的自定義控制項很少
設計原則
- 保持接近 wpf 的原始外觀
- 不需要任何配置,但為想要控制全局和個人行為的人提供選項
- 支持 wpf 對創建新控制項的內置控制項的擴展,以便成為現有應用程式的直接替代品
文檔
使用文档地址:https://benruehl.github.io/adonis-ui/docs/getting-started/introduction/
開始吧
Install-Package AdonisUI.ClassicTheme -Version 1.17.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>
- 從 adonis ui 的默認樣式派生窗口樣式,如下所示:
<Window.Style>
<Style TargetType="Window" BasedOn="{StaticResource {x:Type Window}}"/>
</Window.Style>
控制項特色
在運行時切換配色方案
adonis ui 帶有淺色和深色配色方案。可以不受限制地添加自定義配色方案。
| 淺色方案 | 深色方案 scheme |
|---|---|
![]() |
![]() |
要在运行时切换配色方案,ResourceDictionary需要从应用程序资源中删除包含方案的所有颜色和画笔,以便可以添加不同的配色方案。这可以使用内置ResourceLocator类来完成,例如在单击事件处理程序中。
AdonisUI.ResourceLocator.SetColorScheme(Application.Current.Resources, ResourceLocator.DarkColorScheme);
第一个参数必须是对 ResourceDictionary 包含配色方案的引用,作为其MergedDictionaries。 第二个参数是应添加的配色方案的 Uri。
強調色
在依賴於背景區域和邊框的統一顏色的同時,強調色可用於視覺突出重要點。默認情況下,兩種配色方案都使用藍色作為強調色。這可以通過覆蓋強調色值來改變。一組樣式有助於在強調色上顯示按鈕等控制項。
自定義窗口標題欄
Adonis UI 带来了一个自定义窗口标题栏,默认情况下看起来与 Windows 10 标题栏一模一样,但有几个优点。首先,它尊重当前的配色方案,因此在切换到深色配色方案时它会变暗。其次,它的颜色也可以独立于颜色方案设置,例如通过绑定和触发器。第三,它的内容可以很容易地定制,例如通过隐藏图标、添加额外的按钮或在其中放置标签。派生您的窗口AdonisWindow以接收这些功能。
![]() |
![]() |
![]() |
![]() |
光標聚光燈懸停效果(cursor spotlight hover effect)
依赖交互的 UI 控件(如按钮、文本框、组合框、列表框等)在此处使用称为 Cursor Spotlight 的悬停效果。当将鼠标悬停在隐藏的控件上时,它会使光标周围的图层可见。它适用于两种配色方案。
| 淺色方案 | 深色方案 scheme |
|---|---|
![]() |
![]() |
因为它与OpacityMasks一起作用不仅限于照亮 UI 控件。它可以用来隐藏几乎所有可以用 WPF 渲染的东西。
連鎖反應(ripple effect)
默認情況下,按鈕和 contextmenuitem 在單擊時會顯示漣漪效果。listboxitems 也支持它,但默認情況下禁用它。
| 淺色方案 | 深色方案 scheme |
|---|---|
![]() |
![]() |
圖層
在 ui 設計中,容器將屬於一起的項目分組是很常見的。例如,在 wpf 中,這可以使用 groupboxes 輕鬆實現。如果容器分配了不同的背景顏色以更好地區分分組項目及其周圍環境,則顏色對比可能會成為問題。灰色按鈕最初在白色應用程式背景上可能看起來不錯,但是當它們被移動到也具有灰色背景的 groupbox 中時,它們可能會失去可見性。
這就是為什麼 adonis ui 引入了一個簡單的分層系統,它可以根據 ui 控制項所屬的層自動調整 ui 控制項的顏色。默認情況下,所有樣式的 adonis ui 都會自動適應系統,但也可以禁用它。
| 淺色方案 | 深色方案 scheme |
|---|---|
![]() |
![]() |
這些圖像顯示了一個由 buttons 和 groupboxes 組成的簡單布局。所有控制項都使用它們的默認樣式,除了它們的內容之外沒有設置任何屬性。分層系統負責稍微調整每層按鈕的顏色和 groupboxes 的背景。它確保容器的背景和容器中控制項的背景始終存在差異。如果沒有系統,所有按鈕都將具有完全相同的背景顏色。
該系統是完全可定製的。當然,它適用於所有控制項,而不僅僅是按鈕。每個控制項都可以配置為為其子級增加層,但默認情況下已經為某些控制項(如 groupboxes)啟用它。控制項也可以強制駐留在特定層上。
數據驗證支持
WPF 的数据验证机制提供了验证属性值并在它们无效时分配错误消息的能力。在 Adonis UI 中,如果控件绑定到无效属性,则错误会在控件模板中由红色边框和错误图标指示。当控件获得键盘焦点或用户将鼠标悬停在图标上时,错误消息将显示为弹出窗口。要设置验证错误,可以使用接口IDataErrorInfo或WPF。
| 淺色方案 | 深色方案 scheme |
|---|---|
![]() |
![]() |
默認情況下,錯誤消息彈出窗口顯示在鍵盤焦點和滑鼠懸停上。兩者都可以單獨禁用。
ComponentResourceKeys
Adonis UI 提供的资源具有分配的 ComponentResourceKey,以便以简单的方式使用它们。资源存在于颜色、画笔、尺寸、样式、模板和图标等类别中。例如,当前配色方案的前景画笔可以通过引用其资源键来使用,如Foreground="{DynamicResource {x:Static adonisUi:Brushes.ForegroundBrush}}"。 ComponentResourceKeys 允许使用 IntelliSense 自动完成,这在探索可用资源时会派上用场。
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" -->
演示
板上有一個 wpf 演示應用程式,它顯示了 adonis ui 的大部分功能。請不要猶豫,試一試。
License
MIT © Benjamin Rühl













