You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:50:25