내 WPF 응용 프로그램에는 지정된 .ttf 파일을 사용하여 텍스트를 그리는 사용자 지정 Canvas 구현이 있습니다. ttf 파일은 나중에 특정 시점에 삭제 될 수있는 임시 위치에 있습니다. 내 문제는 일단 캔버스에 내 텍스트가 렌더링되면 ttf 파일은 열린 상태로 유지되는 것처럼 보이고 응용 프로그램이 종료 될 때까지 삭제할 수 없다는 것입니다. 글꼴 파일을 열어 두는 FormattedText 인스턴스가있는 것 같습니다. 누구든지 FormattedText를 "처분"하는 방법을 알고 있습니까? 아니면 다른 방법으로 렌더링 후 글꼴 파일이 닫혀 있는지 확인하십시오.FormattedText를 처리하는 방법/WPF에서 .TTF 파일을 놓으시겠습니까?
내 텍스트 드로잉 코드 :
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에서 파일을 열어 둘 수 있습니다.
업데이트 : 내가 지금 현재 내가 기존에 실패 덮어 쓰는 경우 새 임시 글꼴 디렉토리를 생성하는 해결 방법을 사용하고,이 문제를 해결 할 수 없었습니다. 그것은 작동하지만, 나는 이렇게 행복하게하지 않아도됩니다. 그래서 나는 이것을 고치는 방법에 대한 어떤 제안에도 여전히 관심이 있습니다.
당신이 codea 거의 재 작업과 "을 사용하여"블록에 넣어 봤어? 아직 글꼴을 다룰 필요가 없었으므로 지금은 테스트 프로젝트를 만들 시간이 없습니다. – MetalMikester
그래, 내가 염두에두고 있지만 FormattedText, Typeface도 FontFamily IDisposable 구현 ... – ekholm