我在服务上托管了True类型字体(.ttf)文件。我以字节数组的形式获得它。我需要在运行时设置该文件中的字体。
我在Windows Phone 7上遇到问题,所使用的服务是一个简单的WCF服务,它将.ttf文件作为字节数组提供。
这是我到目前为止所做的,但它似乎不起作用..:
IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication();
string fontPath = string.Empty;
string ss = string.Empty;
IsolatedStorageFileStream fs = new IsolatedStorageFileStream("foo.ttf", System.IO.FileMode.Create, file);
fs.Write(e.Result.byteArray, 0, e.Result.byteArray.Length);
fs.Dispose();
fs = new IsolatedStorageFileStream("foo.ttf", FileMode.Open, file);
ss = fs.Name + @"#My Font";
textBlock1.FontFamily = new System.Windows.Media.FontFamily(ss);
答案 0 :(得分:0)
我终于明白了。文本块的 FontSource 属性具有构造函数,该构造函数将 STREAM 作为参数。可以通过流的形式从隔离存储中读取 .ttf 文件。
然后可以将FontFamily设置为.ttf字体文件中的任何字体。
代码段如下:
void ttlHost_FileStreamingCompleted(object sender, TTL_Host.FileStreamingCompletedEventArgs e)
{
IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication();
FontSource mySource;
byte[] MyFont;
using (IsolatedStorageFileStream fs = new IsolatedStorageFileStream("foo.ttf", System.IO.FileMode.Create, file))
{
fs.Write(e.Result.byteArray, 0, e.Result.byteArray.Length);
}
MyFont = e.Result.byteArray;
using (IsolatedStorageFileStream fileStream = file.OpenFile(""foo.ttf", FileMode.Open, FileAccess.Read))
{
using (StreamReader reader = new StreamReader(fileStream))
{
mySource = new FontSource(reader.BaseStream);
myTextBlock.FontFamily = new FontFamily("My Font");
myTextBlock.FontSource = mySource;
}
}
myTextBlock.Text = "Changed Font";
}