开发Avalonia聊天应用:如何在TextBox中正确显示表情符号?
WPF TextBox显示表情符号解决方案
针对你遇到的TextBox中表情显示为带黑边框的白色方块问题,可按以下步骤解决:
使用支持表情的字体
WPF默认字体可能不包含表情字符集,需指定支持彩色表情的字体,推荐使用系统自带的Segoe UI Emoji(Windows 10+内置),搭配 fallback 字体确保兼容性:<TextBox Classes="input" Height="80" VerticalContentAlignment="Top" Padding="12 8 36 8" TextWrapping="Wrap" AcceptsReturn="True" BorderBrush="Transparent" Foreground="#040415" CaretBrush="#0091AE" Watermark="{x:Static resources:ResourcesStrings.SendMessage}" FontFamily="Segoe UI Emoji, Segoe UI Symbol, Arial"/>这样当
Segoe UI Emoji不支持某表情时,会自动 fallback 到后续字体。启用彩色表情渲染
确保WPF使用支持彩色表情的渲染模式,可在窗口或应用级别设置TextOptions.TextFormattingMode="Display",同时系统需为Windows 10及以上版本(该版本开始原生支持彩色表情渲染):<Window TextOptions.TextFormattingMode="Display"> <!-- 你的控件内容 --> </Window>统一消息显示控件的字体设置
发送消息后用于展示的控件(如TextBlock)也需设置相同的FontFamily,避免输入和显示不一致:<TextBlock FontFamily="Segoe UI Emoji, Segoe UI Symbol, Arial" Text="{Binding MessageContent}"/>兼容旧系统(可选)
若需支持Windows 7等旧系统,可嵌入第三方开源表情字体(如Noto Color Emoji),注意遵守字体版权协议,嵌入方式如下:- 将字体文件添加到项目,设置
生成操作为资源 - 在XAML中引用:
<FontFamily x:Key="NotoEmoji">pack://application:,,,/Fonts/#Noto Color Emoji</FontFamily> <!-- 控件中使用 --> <TextBox FontFamily="{StaticResource NotoEmoji}, Segoe UI Symbol, Arial"/>
- 将字体文件添加到项目,设置
测试表情输入
使用Windows自带表情面板(按下Win + .快捷键)输入表情,验证是否能正常显示,排除输入字符本身的问题。
内容的提问来源于stack exchange,提问作者Flictivity
相关产品推荐
相关产品推荐

