我为UWP程序制作了自己的自定义.ttf字体,并将它们放在Assets文件夹中(相对于2017/2019)。在RichEditBox中处理文档时,它们运行良好。但是,当我保存RTF文件然后打开它时,我的自定义字体将被忽略。如果我预先将自定义字体安装到Windows \ Fonts文件夹中,则“打开文件”将使用我的自定义字体加载文档。看起来好像没有安装我的自定义字体,程序不会将它们链接到文档。
再次-我用RichEditBox和一个自定义字体编写了一个程序。处理后-更改字体,样式等,一切都按设计进行。当我使用该程序保存RTF文件,并使用该程序(相同)打开该RTF时-颜色表还可以,尽管使用该程序编译了字体,但我的字体没有显示(BuildAction-Content; CopyToOutputDirectory-Always Copy)。为了简化-我用文件包含的信息做了按钮。尽管已编译字体(位于Assets文件夹中),但程序不会将其链接到文档。
实际上,我使用该按钮尝试重现此处描述的内容:RichEditBox (UWP) ignores font and foreground when setting Rtf text但是,就我而言,RichEditBox仅显示Windows \ Fonts目录中安装的字体。如何解决该问题,并使用指向通过我的程序编译的本地字体的链接,或者使安装程序将字体安装到Windows \ Fonts目录? 我该如何在不安装我的自定义字体的情况下使用它们(将它们链接到文档)而不安装它们,或者我需要做的UWP程序将我的自定义字体安装到用户的设备上?
这是我用来显示文本的按钮的代码:
private void Page_Click(object sender, RoutedEventArgs e)
{
string myRtfString = @"{\rtf1\fbidis\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil MyFont;}{\f1\fnil MyFont1;}{\f2\fnil MyFont2;}} {\colortbl ;\red0\green0\blue0;\red255\green255\blue255;\red255\green100\blue0;} {\*\generator Riched20 10.0.18362}\viewkind4\uc1 \pard\sl480\slmult1\qj\cf1\highlight2\f0\fs36 tt\highlight3\f1 g\f0 acgt\f2 c\highlight2\f0 tt\highlight0\par}";
editor.Document.SetText(TextSetOptions.FormatRtf, myRtfString);
}
这是RichEditBox的XAML:
<RichEditBox
x:Name="editor"
Height="200"
FontFamily="Assets/Fonts/MyFont.ttf#MyFont"
FontSize="24" RelativePanel.Below="openFileButton"
RelativePanel.AlignLeftWithPanel="True"
RelativePanel.AlignRightWithPanel="True" />
答案 0 :(得分:1)
Gosha,通过这种方式,您可以将至少一种字体应用于该.rtf文件-参见下文。对于其他人,我认为您需要使用该.rtf中的地图信息,也可以自己制作一张其他地图。那将是一些“ trabajo”,但是你能做什么?
private void applyMyFonts()
{
string TextOut;
MyRichEditBox.Document.GetText(TextGetOptions.None, out TextOut);
MyRichEditBox.Document.Selection.SetRange(0, TextOut.Length);
MyRichEditBox.Document.Selection.CharacterFormat.Name = "Assets/Fonts/MyFont.ttf#MyFont";
}
private async void OpenButton_Click(object sender, RoutedEventArgs e)
{
Windows.Storage.Pickers.FileOpenPicker open =
new Windows.Storage.Pickers.FileOpenPicker();
open.SuggestedStartLocation =
Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary;
open.FileTypeFilter.Add(".rtf");
Windows.Storage.StorageFile file = await open.PickSingleFileAsync();
if (file != null)
{
try
{
Windows.Storage.Streams.IRandomAccessStream randAccStream =
await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
// Load the file into the Document property of the RichEditBox.
MyRichEditBox.Document.LoadFromStream(Windows.UI.Text.TextSetOptions.FormatRtf, randAccStream);
}
catch (Exception)
{
ContentDialog errorDialog = new ContentDialog()
{
Title = "File open error",
Content = "Sorry, I couldn't open the file.",
PrimaryButtonText = "Ok"
};
await errorDialog.ShowAsync();
}
}
applyMyfonts();
}