在我的 WPF 应用程序中,我有一个自定义的 Canvas 实现,其中我使用指定的 .ttf 文件绘制了一些文本。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
来锁定字体文件(尝试注释掉该行)。使用 formattedText 实例分配 textWidth 和 textHeight 变量足以让 WPF 保持文件打开。
更新: 我无法解决这个问题,所以目前我正在使用一种解决方法,如果覆盖现有字体目录失败,则会创建一个新的临时字体目录。它有效,但我对不得不这样做并不满意,所以我仍然对如何解决这个问题的任何建议感兴趣。