У меня была похожая проблема, и я нашел решение, пожалуйста, посмотрите здесь или здесь
Я сводлюсь либо к
1. создание скрытого текстового блока, в котором используется шрифт перед выполнением преобразования, или
2. создание FontSource.
Я использовал первый, потому что сейчас это было проще.
Текстовый блок скрыт, но он обеспечивает загрузку встроенного шрифта.
В моем контроле я добавил следующее:
void Grid_Loaded(object sender, RoutedEventArgs e) {
#if SILVERLIGHT
Grid Grid = (Grid)sender;
AddFontLoaderTextBox(Grid, "Signs Road Features");
AddFontLoaderTextBox(Grid, "Signs G Old");
AddFontLoaderTextBox(Grid, "Signs G");
AddFontLoaderTextBox(Grid, "Signs G1");
AddFontLoaderTextBox(Grid, "Signs G2");
AddFontLoaderTextBox(Grid, "Signs G3");
AddFontLoaderTextBox(Grid, "Signs Info");
AddFontLoaderTextBox(Grid, "Signs Regulatory");
AddFontLoaderTextBox(Grid, "Signs Regulatory1");
AddFontLoaderTextBox(Grid, "Road Manager");
AddFontLoaderTextBox(Grid, "Signs Temporary");
AddFontLoaderTextBox(Grid, "Road Manager");
AddFontLoaderTextBox(Grid, "Signs Warning");
AddFontLoaderTextBox(Grid, "Signs Warning1");
#endif
}
#if SILVERLIGHT
void AddFontLoaderTextBox(Grid Grid, string fontName) {
TextBlock TextBlock = new TextBlock();
TextBlock.FontFamily = new FontFamily(string.Format(
"pack://application:,,,/ITIS.Controls.LinearViewer.Silverlight;component/Fonts/{0}.ttf#{0}", fontName));
TextBlock.Opacity = 0; /* hide the text block, we only load it for the font to be cached */
Grid.SetRowSpan(TextBlock, 3); /* just to ensure the text block doesn't affect the size of the first row */
Grid.Children.Insert(0, TextBlock); /* keep underneath other children */
}
#endif