1

我有一个托管在服务上的 True type 字体 (.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);
4

1 回答 1

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";
}
于 2012-07-03T10:57:54.437 回答