2009-09-25 1 views
4

각 x 픽셀마다 표시되는 문자열을 표시해야합니다. (x는 전체 문자열에 걸쳐 있습니다).WPF TextBlock : 표시된 문자를 고르게 배치하는 방법은 무엇입니까?

예 : "안녕"- 물론 200

는 I 각 문자의 TextBlock을 사용할 수 오르토> 위치에 H (픽셀) 0, 위치 50에서 즉, 100 L, 150 L, 그러나 과잉으로 보인다.

TranslateTransform은 트릭을 수행하지 않는 것 같습니다. 이전 문자의 END와 비교하여 내 문자를 상대적으로 오프셋합니다. 이는 내가 원하는 것이 아닙니다.

귀하의 도움을 위해 TIA.

답변

6

WPF에서이 작업을 수행 할 내장 함수가 있다고 생각하지 않지만 잘못된 것일 수 있습니다.

아래 코드는이를 위해 사용자가 직접 컨트롤을 작성하는 방법을 보여줍니다. 그것은 효율적이지이며, 글꼴 등등을 제어하기 위해 더 많은 속성을 포함, 조정이 함께 할 수있는,하지만 당신은 아이디어를 얻을 :

SpacedTextBlock.cs :

public class SpacedTextBlock : Control 
{ 
    public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", 
     typeof(string), 
     typeof(SpacedTextBlock)); 

    public string Text 
    { 
     get { return GetValue(TextProperty) as string; } 
     set { SetValue(TextProperty, value); } 
    } 

    protected override void OnRender(DrawingContext drawingContext) 
    { 
     base.OnRender(drawingContext); 

     if (Text != null) 
     { 
      var widthPerChar = ActualWidth/Text.Length; 
      var currentPosition = 0d; 

      foreach (var ch in Text) 
      { 
       drawingContext.DrawText(new FormattedText(ch.ToString(), CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, new Typeface("Arial"), 12, Foreground), new Point(currentPosition, 0)); 
       currentPosition += widthPerChar; 
      } 
     } 
    } 
} 

Window1.xaml를 :

<local:SpacedTextBlock Text="Hello"/> 

결과 :

alt text http://img199.imageshack.us/img199/8022/screenshotud.png

+0

흥미 롭습니다. 사용자 정의 글꼴과 색상을 지원하기 위해 더 많은 코드를 추가해야합니다. 감사. –

2

내 생각에 상황의 세부 사항에 따라 달라질 수 있습니다. 하지만 각 문자 사이에 공백을 추가하고 텍스트 정렬을 맞출 수 있습니까?

불행히도 필요한 경우 # 픽셀 수를 설정하지 않아도되지만 이런 식으로 간격을 지정할 수도 있습니다. 이것이 창에서 하나의 자리에 있지 않거나 동적 텍스트와 조금 더 복잡하다면 ... 좀 더 우아한 해결책을 찾고 싶을 것입니다.

+2

Scott, 귀하의 솔루션은 가장 빠르고 더럽고 효율적인 비율을 가지고 있습니다. 사용자 지정 글꼴 및 기타 필요한 추가 코드가 필요하지 않습니다. 불행히도, 일부 테스트 후에는 작은 부작용 때문에 폐기해야했습니다. 당신은 내 +1을 가지고 있지만 –

+0

고마워, 좋은 해결책을 찾길 바래! – Scott