2

我们有一个带有 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 资源嵌入到应用程序中的自定义字体?

非常感谢!

4

1 回答 1

0

您可以直接设置 FontFamily 属性,如richEditBox.FontFamily = new FontFamily("Consolas").

对于自定义字体,您可以下载它并将其添加到项目的 Assets 文件夹中(右键单击Assets -> Add -> Existing Item -> your font file)。
这个字体文件的属性应该是:

  • 构建操作 - 内容
  • 复制到输出目录 - 如果较新则复制

用法:

<RichEditBox FontFamily= "Assets/customfont.ttf#font name"/>  

我的样本:

<RichEditBox x:Name="myRichEditBox1"  FontFamily="Assets/Helvetica-Neue-2.ttf#Helvetica Neue" />

更新:

我可以重现你的问题。您只需要在加载文本后设置 fontfamily,如下所示。

myRichEditBox1.Loaded += (sender, args) =>
    {
        myRichEditBox1.Document.SetText(TextSetOptions.FormatRtf, rtf);
myRichEditBox1.FontFamily = new FontFamily("Algerian");
//myRichEditBox1.FontFamily = new FontFamily("Assets/Helvetica-Neue-2.ttf#Helvetica Neue");
    };
于 2021-06-14T08:35:44.730 回答