我们有一个带有 RichEditBox 的 UWP 应用程序,它从如下所示的 RTF 接收内容:
{\rtf1\ansi\ansicpg1252\cocoartf2512
\cocoatextscaling1\cocoaplatform1{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;}
{\colortbl;\red255\green255\blue255;\red59\green52\blue26;}
{\*\expandedcolortbl;;\cssrgb\c23137\c20392\c10196;}
\pard\tx5600\tx6160\tx6720\fi200\slleading21\pardirnatural\partightenfactor0
\f0\fs20 \cf2 Healthy Eating Takes Neighborhood by Storm!}
如您所见,字体系列是 HelveticaNeue,它不是 Windows 10 机器中预装的字体,因此我们的 RichEditBox 回退到系统 Segoe UI。
我们使用以下代码设置 RichEditBox 的内容:
string rtfContent = "{\rtf1 [...] by Storm!}"; // the actual content to fill the RichEditBox
RichEditBox myRichEditBox = ...;
myRichEditBox .Document.SetText(TextSetOptions.FormatRtf, rtfContent);
请注意,我们无法修改输入 RTF。
我们还尝试了一个更简单的 PoC,我们在 XAML 中设置:
<RichEditBox x:Name="myRichEditBox1" FontFamily="Algerian" Width="500" Height="300"/>
在后面的代码中:
private void TestRtfFonts()
{
string rtf = "{\\rtf1\\fbidis\\ansi\\ansicpg1252\\deff0\\nouicompat\\deflang2057{\\fonttbl{\\f0\\fswiss\\fprq2\\fcharset0 Helvetica Neue;}}{\\colortbl ;\\red0\\green0\\blue0;}{\\*\\generator Riched20 10.0.18362}\\viewkind4\\uc1\\pard\\nowidctlpar\\tx720\\cf1\\f0\\fs21 I would like to see this text in Algerian}";
myRichEditBox1.Loaded += (sender, args) =>
{
myRichEditBox1.Document.SetText(TextSetOptions.FormatRtf, rtf);
};
}
这显然表明 RichEditBox 无法正常工作......
有没有办法告诉 UWP 使用另一种字体(例如 Verdana)而不是 Segoe UI,或者更好的是,我作为 App 资源嵌入到应用程序中的自定义字体?
非常感谢!