我为我的UWP程序制作了自己的自定义.ttf字体,然后将它们放入资产文件夹中(vs 2017/2019(。当文档在RicheditBox中处理时,它们的运行良好。但是,当我保存RTF文件然后打开它时,我的自定义字体将被忽略。如果我事先将自定义字体安装到Windows fonts文件夹中,则用自定义字体打开文件加载文档。看起来没有安装我的自定义字体,该程序不会将它们链接到文档。
再次 - 我在该程序中使用Richeditbox和我的自定义字体编写了一个程序。处理时 - 字体更改,样式更改等 - 一切都按设计。当我将RTF文件与该程序保存时,并使用该程序打开RTF(相同(程序 - 颜色表还可以,但是我的字体未显示为字体(buildAction -content -content; copytoOutToutputdirectory-始终(。要简化 - 我用文件包含的信息制作了按钮。尽管字体已编译(位于资产文件夹中(,但该程序并未将其链接到文档。
实际上,使用该按钮,我尝试重现此处描述的内容:Richeditbox(UWP(在设置RTF文本时忽略了字体和前景,但是在我的情况下,Richeditbox仅显示Windows fonts目录中安装的字体。如何克服它并使用与我的程序编译的本地字体的链接,或者使安装程序安装字体将字体安装到Windows fonts目录? 我如何在不安装UWP程序的情况下使用自定义字体(将其链接到文档(,或者我需要在安装自身时将自定义字体安装到用户的设备上?
这是我用来显示文本的按钮的代码:
private void Page_Click(object sender, RoutedEventArgs e)
{
string myRtfString = @"{rtf1fbidisansiansicpg1252deff0nouicompatdeflang1033{fonttbl{f0fnil MyFont;}{f1fnil MyFont1;}{f2fnil MyFont2;}} {colortbl ;red0green0blue0;red255green255blue255;red255green100blue0;} {*generator Riched20 10.0.18362}viewkind4uc1 pardsl480slmult1qjcf1highlight2f0fs36 tthighlight3f1 gf0 acgtf2 chighlight2f0 tthighlight0par}";
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" />
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();
}