1

サービスでホストされているTrueTypeフォント(.ttf)ファイルがあります。バイト配列の形で取得します。実行時にそのファイルにフォントを設定する必要があります。

私はWindowsPhone7で問題に直面しており、使用されるサービスは.ttfファイルをバイト配列として提供する単純なWCFサービスです。

これは私が今までやってきたことですが、うまくいかないようです。

        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

私はついにそれを理解しました。STREAMをパラメーターとして受け取るコンストラクターを持つテキストブロックのFontSourceプロパティがあります。.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 に答える