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
<PackageReference Include="PF.UI.Resources" Version="2.1.0" />
<PackageVersion Include="PF.UI.Resources" Version="2.1.0" />
<PackageReference Include="PF.UI.Resources" />
paket add PF.UI.Resources --version 2.1.0
#r "nuget: PF.UI.Resources, 2.1.0"
#:package PF.UI.Resources@2.1.0
#addin nuget:?package=PF.UI.Resources&version=2.1.0
#tool nuget:?package=PF.UI.Resources&version=2.1.0
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 | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0-windows7.0 is compatible. net9.0-windows was computed. net10.0-windows was computed. |
-
net8.0-windows7.0
- PF.UI.Controls (>= 1.1.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
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 - 初始版本