2013-05-02 2 views
1

텍스트의 너비를 표시하려고합니다 (문자 수 제외).WPF로 Winforms, 텍스트 폭 측정 (Graphics.MeasureCharacterRanges)

Winforms에는 Grapihcs.MeasureCharacterRanges라는 메서드가 있습니다. WPF에서는 FormattedText.WidthIncludingTrailingWhitespace입니다. 이것이 동일한 가치를 부여하는 것처럼 보일지라도 그들은 그렇지 않습니다. 왜 안돼? 우리 Graphics.MeasurecharacterRanges,하지만 우리는 정말 하나의 방법에 대한 winforms을 끌어낼 수 없습니다. 그것은 WPF 애플 리케이션입니다.

+0

어쩌면 모니터는 96dpi보다 높은 해상도를 가지고? WPF는 해상도에 독립적이지만 'Graphics'는 그렇지 않습니다. 차이점을 설명 할 수 있습니다. 내가 그것에 대해 확신하지 못하기 때문에, 나는 이것을 대답이 아니라 주석으로 남겨 두었습니다. –

+0

아마도 도움이 될 것 같습니까? http://stackoverflow.com/questions/632445/measuring-text-in-wpf – series0ne

답변

0

WPF는 그래픽 요소의 대부분의 측정에 장치 독립적 인 단위를 사용하며 WinForms에 사용 된 단위와 다를 수 있습니다. FrameworkElements의 Height 속성과 사용 된 단위에 대해서는 this link on MSDN을 참조하십시오.

3

우리는 WPF에서 간단한 텍스트 측정을 수행하기 위해 다음과 같은 유틸리티 클래스를 사용하고 있습니다 :

public static class TextUtilities 
{ 
    public static Size MeasureText(string text, 
     FontFamily family, double size, FontStyle style, FontWeight weight, FontStretch stretch, TextFormattingMode formattingMode) 
    { 
     FormattedText formattedText = new FormattedText(
      text, 
      CultureInfo.CurrentCulture, 
      FlowDirection.LeftToRight, 
      new Typeface(family, style, weight, stretch), 
      size, 
      Brushes.Black, 
      null, 
      formattingMode); 

     return new Size(formattedText.Width, formattedText.Height); 
    } 

    public static Size MeasureText(string text, TextBlock textBlock) 
    { 
     return MeasureText(text, 
        textBlock.FontFamily, 
        textBlock.FontSize, 
        textBlock.FontStyle, 
        textBlock.FontWeight, 
        textBlock.FontStretch, 
        TextOptions.GetTextFormattingMode(textBlock)); 
    } 


    public static Size MeasureText(string text, Control control) 
    { 
     return MeasureText(text, control.FontFamily, control.FontSize, 
      control.FontStyle, control.FontWeight, control.FontStretch, 
      TextOptions.GetTextFormattingMode(control)); 
    } 
}