私の WPF アプリケーションには、指定した .ttf ファイルを使用してテキストを描画するカスタム Canvas 実装があります。ttf ファイルは、後で削除できる一時的な場所に存在します。私の問題は、テキストがキャンバスにレンダリングされると、ttf ファイルが開いたままのように見え、アプリケーションが閉じられるまで削除できないことです。フォントファイルを開いたままにする FormattedText インスタンスのようです。FormattedText を「破棄」する方法を知っている人はいますか、またはレンダリング後にフォント ファイルが閉じていることを確認する方法はありますか?
私のテキスト描画コード:
public class MyCanvas : System.Windows.Controls.Canvas
{
protected override void OnRender(DrawingContext dc)
{
base.OnRender(dc);
// Some other drawing stuff...
FontFamily fontFamily = new FontFamily(fontUri);
Typeface typeFace = new Typeface(fontFamily, FontStyles.Normal, FontWeights.Normal, FontStretches.Normal);
FormattedText formattedText = new FormattedText(chars, System.Globalization.CultureInfo.InvariantCulture, FlowDirection.LeftToRight, typeFace, text.FontHeight, new SolidColorBrush(color));
dc.DrawText(formattedText, new Point(text.X + offsetX, text.Y + offsetY));
int textWidth = (int) formattedText.Width;
int textHeight = (int)formattedText.Height;
// Drawing continues...
}
}
注:フォントファイルをロックするために呼び出す必要さえないようDrawText
です(その行をコメントアウトしようとしました)。WPF がファイルを開いたままにするには、formattedText インスタンスを使用して textWidth 変数と textHeight 変数を割り当てるだけで十分です。
更新: この問題を解決できなかったので、現在、既存の一時フォント ディレクトリの上書きに失敗した場合に新しい一時フォント ディレクトリを作成する回避策を使用しています。それは機能しますが、このようにしなければならないことにあまり満足していないので、これを修正する方法の提案にまだ興味があります.