WPF TextBlock : 캐릭터를 균일하게 표시하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1476311

  •  16-09-2019
  •  | 
  •  

문제

각 문자가 X 픽셀을 표시 할 때마다 문자열을 표시해야합니다. (X는 전체 문자열이 발생합니다).

EG : "Hello" -> H에서 (픽셀) 0, 위치 50에서 E, L, L, 15에서 L, O. 200에서 O.

물론 각 문자마다 텍스트 블록을 사용할 수는 있지만 과잉처럼 보입니다.

TranslateTransform은 트릭을 수행하지 않는 것 같습니다. 이전 캐릭터의 끝에 비교적 캐릭터를 상쇄합니다.

당신의 도움에 대한 Tia.

도움이 되었습니까?

해결책

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

다른 팁

나는 이것이 당신의 상황의 세부 사항에 달려 있다고 생각합니다. 그러나 각 문자 사이에 공백을 추가하고 텍스트 정렬을 정당화하도록 설정할 수 있습니까?

불행히도 당신은 그것이 당신이 필요한 것인지이면 #의 #을 이런 식으로 설정하지 않습니다 ... 그러나 당신은 이런 식으로 간격을 가질 수 있습니다. 이것이 창문의 한 지점이 아니거나 동적 텍스트로 조금 더 복잡한 경우 ... 더 우아한 솔루션을 살펴볼 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top