PF.UI.Resources 2.1.0

dotnet add package PF.UI.Resources --version 2.1.0
                    
NuGet\Install-Package PF.UI.Resources -Version 2.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PF.UI.Resources" Version="2.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="PF.UI.Resources" Version="2.1.0" />
                    
Directory.Packages.props
<PackageReference Include="PF.UI.Resources" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add PF.UI.Resources --version 2.1.0
                    
#r "nuget: PF.UI.Resources, 2.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package PF.UI.Resources@2.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=PF.UI.Resources&version=2.1.0
                    
Install as a Cake Addin
#tool nuget:?package=PF.UI.Resources&version=2.1.0
                    
Install as a Cake Tool

PF.UI.Resources

PF.UI 组件库的主题资源层:深色/浅色主题字典、图标、图片资源,以及全局字体机制 (GlobalFontFamily)。依赖 PF.UI.Controls(控件样式的 TargetType 需要引用其中的控件类型), 零第三方运行时依赖(XAMLTools.MSBuild 仅在构建期生效)。

安装

dotnet add package PF.UI.Resources

引入主题(App.xaml)

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            
            <ResourceDictionary Source="pack://application:,,,/PF.UI.Resources;component/Colors/Dark.xaml" />
            
            <ResourceDictionary Source="pack://application:,,,/PF.UI.Resources;component/Themes/Default.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Themes/Default.xaml 是构建期由 Themes/**/**/*.xaml 自动合并生成的产物(XAMLTools.MSBuild), 不要手动编辑这个文件——需要改样式时改对应的源文件(Themes/Basic/Themes/Styles/Base/Themes/Styles/Custom/),下次构建会自动重新生成。

全局字体机制

内置样式的 FontFamily 统一绑定到一个键:

<FontFamily x:Key="GlobalFontFamily">Microsoft YaHei UI, Segoe UI</FontFamily>

默认回退系统字体,零配置可用。若需要统一换成思源黑体,引用可选的 PF.UI.Fonts.SourceHan 包并在 App.xaml 中追加一条 MergedDictionaries 即可覆盖,具体用法见该包的 README。

GlobalFontFamily 已批量注入到 767 处内置样式中(Themes/**/**/*.xaml 源文件里能直接搜到 <Setter Property="FontFamily" .../>),新增自定义样式时建议同样显式设置该 Setter,而不是 仅依赖属性继承——继承在跨越独立 Window 边界(弹窗、悬浮通知等)时不可靠。

v2.0.0 破坏性变更

7 个从未真正生效的字体键(Source_Han_Sans_SC_Bold 等,原 URI 缺少 #FamilyName,一直静默 回退系统字体)已移除,随附思源黑体 otf 文件也已整体移至 PF.UI.Fonts.SourceHan 独立包。 详细迁移说明见 PF.UI.Resources.csproj 中的 PackageReleaseNotes

目录结构

Themes/
├── Basic/              → 原子资源:Brushes、Converters、Effects、Fonts、Geometries、Sizes...
├── Styles/Base/         → 各控件的基础样式(xxxBaseStyle)
├── Styles/Custom/       → 具体控件的完整样式与 ControlTemplate
└── Default.xaml         → 构建期自动生成,勿手改
Colors/                  → 浅色/深色配色方案
Images/、SplashWindow/   → 图标、图片、启动画面
Product Compatible and additional computed target framework versions.
.NET net8.0-windows7.0 is compatible.  net9.0-windows was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.1.0 140 7/31/2026
2.0.1 101 7/31/2026
2.0.0 103 7/31/2026
1.1.1 127 7/14/2026

v2.1.0 — 全局语言机制 + 图标按钮文字压图标修复

[新增:多语言]
- Themes/Basic/12_Strings.xaml:控件库全部 26 条用户可见文案抽为 Lang.* 资源键,
简体中文作为「地板」随 Default.xaml 一起发布。下游不做任何配置时文案照常显示,
不是破坏性变更。
- Languages/en-US.xaml:内置英文包(刻意放在 Themes/ 之外,避免被 XAMLTools
自动并入 Default.xaml)。
- 主题中 47 处硬编码中文改为 {DynamicResource Lang.*},配合 PF.UI.Shared 的
LanguageManager 可运行时热切换;目标语言缺失的键自动回落到地板,不会空白。
下游可注册自有语言字典参与切换,详见 PF.UI.Shared v1.1.0 说明。

[修复]
- ButtonIcon / ButtonIconCircular:模板内 Path 与 ContentPresenter 在同一 Grid
单元重叠摆放,而 WPF 会给 DatePicker、Calendar 等控件的图标按钮运行时注入
「显示日历」「上一个按钮」之类辅助文本,原「Content 为 null 才隐藏」的触发器因此
失效,文字被裁切后压在图标上。规则改为「有图标就只显图标,无图标才回落显示
Content」,一次性覆盖 DatePicker / DateTimePicker / TimePicker 的 15 处按钮
与 Calendar 的上/下月按钮。若此前依赖该样式同时显示图标与文字,请改用
ButtonDefault 等常规按钮样式。
- FlowDocument 阅读器工具栏两处放大/缩小提示互换的错误。

v2.0.0 (2026-07-30) — 全局字体机制 + 思源黑体拆分为独立包(破坏性变更)

[破坏性变更]
- 移除 7 个从未真正生效的字体键(原 URI 缺少 #FamilyName,一直静默回退系统字体,
全仓库/下游零引用):Source_Han_Sans_SC_Bold / ExtraLight_ExtraLight / Heavy_Heavy /
Light_Light / Medium_Medium / Normal_Normal / Regular。
迁移方式:改用新的单一键 GlobalFontFamily 并通过 FontWeight 选字重:
 Source_Han_Sans_SC_ExtraLight_ExtraLight → FontWeight="250"
 Source_Han_Sans_SC_Light_Light           → FontWeight="Light"      (300)
 Source_Han_Sans_SC_Normal_Normal         → FontWeight="350"
 Source_Han_Sans_SC_Regular               → FontWeight="Normal"     (400)
 Source_Han_Sans_SC_Medium_Medium         → FontWeight="Medium"     (500)
 Source_Han_Sans_SC_Bold                  → FontWeight="Bold"      (700)
 Source_Han_Sans_SC_Heavy_Heavy            → FontWeight="Black"     (900)
 注意:思源黑体的 "Normal" 字重实际是 350,WPF 的 FontWeight="Normal" 对应 400
 (即思源的 Regular),需要 350 那一档必须显式写 FontWeight="350"。
- 7 个思源黑体 otf 文件(约 111MB)已整体移出本包,拆分为独立可选包
PF.UI.Fonts.SourceHan;本包体积大幅下降。不需要思源黑体的消费方无需任何改动。

[新功能]
- 新增全局字体键 GlobalFontFamily,默认回退系统字体(Microsoft YaHei UI /
Segoe UI),767 个内置样式已通过工具批量注入 FontFamily Setter,全局统一生效。
- 引用 PF.UI.Fonts.SourceHan 包(App.xaml 追加一个 MergedDictionaries 条目)即可
将全局字体覆盖为思源黑体 7 字重,不引用则保持系统字体,零配置。

v1.1.1 (2026-07-03) — Splash 更改边框颜色


v1.1.0 (2026-07-03) — Splash 重设计 + LogoSource/Progress 依赖属性

[新功能]
- Splash 新增 LogoSource 依赖属性(ImageSource),用法与 WelcomeText 一致,
消费项目可在 CreateShell 中通过 splash.LogoSource = ... 覆盖为自己的品牌 LOGO;
展示时 Stretch=Uniform,不会因外部图片长宽比例与默认图不同而变形。
- Splash 新增 Progress 依赖属性(double,0~100),绑定至新版状态栏的
WaveProgressBar.Value,消费项目可在 LoadingAction 执行过程中驱动真实加载进度。

[界面改版]
- Splash 由通栏大图旧版布局改为圆角卡片 + 投影 + 扫描进度条 + 状态栏的现代化设计
(820×480,AllowsTransparency,参照成熟范例重写)。
- 状态栏加载指示由 LoadingLine 改为 WaveProgressBar;WaveFill 使用
PrimaryColor→InfoColor→PrimaryColor 纵向三色渐变(纵向而非对角线,避免随
PART_Wave 内建的横向循环滚动动画产生周期性跳色)。
- 窗口显式清零 BorderBrush/BorderThickness,修复 AllowsTransparency 场景下
WindowWin10 样式默认窗体描边(PrimaryBrush 1px,按整窗尺寸绘制)与卡片自身
圆角描边不对齐、露出方形外框的问题。

v1.0.0 - 初始版本