WPF自定义字体在设计窗口不显示的问题求助
WPF自定义字体运行正常但设计器不显示的问题排查与修复
问题描述
使用C#开发WPF应用,已通过ResourceDictionary添加自定义字体,应用运行时字体显示正常,但XAML设计器始终显示默认字体。相关代码如下:
App.xaml
<Application x:Class="Bali.Chat.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Bali.Chat" StartupUri="MainWindow.xaml"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Styles/Fonts.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application>
Fonts.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <FontFamily x:Key="LatoRegular">pack://application;,,,/Fonts/#Lato Regular</FontFamily> <FontFamily x:Key="LatoThin">pack://application;,,,/Fonts/#Lato Thin</FontFamily> </ResourceDictionary>
MainWindow.xaml
<Window x:Class="Bali.Chat.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Bali.Chat" mc:Ignorable="d" Icon="Images/Logo/logo-small.png" WindowStyle="None" AllowsTransparency="True" Title="Bali Chat" Height="250" Width="400"> <StackPanel> <TextBlock Text="Default Font!" FontSize="40" /> <TextBlock Text="Thin Font" FontSize="40" FontFamily="{StaticResource LatoThin}" /> <TextBlock Text="Regular Font" FontSize="40" FontFamily="{StaticResource LatoRegular}" /> </StackPanel> </Window>
设计器显示效果:使用自定义字体的TextBlock均显示为系统默认字体,仅第一个TextBlock显示正常。
应用运行效果:三个TextBlock分别显示默认字体、Lato Thin和Lato Regular字体,自定义字体渲染正常。
需要实现无需启动应用即可在设计器中预览字体效果。
解决方案
1. 确认字体文件的生成属性
右键项目中的字体文件(如Lato Regular.ttf、Lato Thin.ttf),在属性窗口设置:
- 生成操作:
Resource - 复制到输出目录:
不复制
设计器无法加载嵌入式资源通常是因为生成属性未正确配置。
2. 修改字体引用路径为设计器友好格式
将Fonts.xaml中的pack:// URI替换为相对路径写法,设计器对这种格式的支持更可靠:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <FontFamily x:Key="LatoRegular">./Fonts/#Lato Regular</FontFamily> <FontFamily x:Key="LatoThin">./Fonts/#Lato Thin</FontFamily> </ResourceDictionary>
路径需与字体文件实际位置匹配,若Fonts文件夹位于项目根目录,上述写法即可生效。
3. 清理重建项目并刷新设计器
设计器缓存可能导致资源加载异常,执行以下步骤:
- 右键项目 → 清理
- 右键项目 → 生成
- 关闭并重新打开XAML设计器
4. 启用设计器的运行时代码功能
在Visual Studio的XAML设计器右上角,点击齿轮图标打开设计器选项,确保勾选运行设计时代码。该选项会让设计器加载应用的资源字典,否则自定义资源无法被识别。
5. 测试性安装字体到系统(可选)
若上述方法无效,可临时将字体安装到系统中:
- 双击字体文件 → 点击"安装"
若设计器此时能显示自定义字体,说明问题仍出在嵌入式资源的配置上,回到第一步重新检查生成属性。
内容的提问来源于stack exchange,提问作者Rodrigo Balibrera
相关产品推荐
相关产品推荐

