如何在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
相关产品推荐
相关产品推荐

