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

如何在WinUI 3的ComboBox中显示所有已安装字体?

WinUI 3 ComboBox显示已安装字体的问题解决

错误原因

WinUI 3 的XAML语法不支持x:Static绑定(这是WPF专属语法),同时你用的Fonts.SystemFontFamilies是WPF的API,WinUI 3里没有这个接口,所以才会抛出找不到类型的错误。所谓“程序集引用”在这里是误提示,实际不需要额外添加引用,只需要换WinUI 3对应的实现方式。

解决方案

1. 修改XAML代码

去掉x:Static绑定,直接绑定到后台定义的字体集合:

<ComboBox x:Name="FontComboBox" ItemsSource="{Binding FontFamilies}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <!-- 显示字体名称,同时用对应字体渲染文本 -->
            <TextBlock Text="{Binding Name}" FontFamily="{Binding}" />
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

2. 后台代码获取系统字体

在窗口的代码文件(比如MainWindow.xaml.cs)中,使用WinUI 3的FontManager类获取所有已安装字体,并设置绑定源:

using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Media;
using System.Collections.Generic;
using System.Linq;

namespace YourAppNamespace
{
    public sealed partial class MainWindow : Window
    {
        // 用于绑定的字体集合
        public List<FontFamily> FontFamilies { get; }

        public MainWindow()
        {
            this.InitializeComponent();
            
            // 获取系统所有字体并按名称排序
            var fontManager = FontManager.Current;
            FontFamilies = fontManager.SystemFontFamilies.OrderBy(f => f.Name).ToList();
            
            // 将当前窗口设为数据上下文,让XAML能绑定到FontFamilies
            this.DataContext = this;
        }
    }
}

关键说明

  • WinUI 3 中获取系统字体必须用FontManager.Current.SystemFontFamilies,这是官方提供的正确API
  • TextBlock的FontFamily可以直接绑定FontFamily对象,无需额外处理
  • 给字体集合排序可以让下拉列表更易读

内容的提问来源于stack exchange,提问作者user21603351

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:40:05