下载托管在服务上的真实类型字体文件(.ttf)并在运行时使用它

时间:2012-06-29 07:40:42

标签: windows-phone-7

我在服务上托管了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);

1 个答案:

答案 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";
}