WPF TextBlock : 캐릭터를 균일하게 표시하는 방법은 무엇입니까?
문제
각 문자가 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
다른 팁
나는 이것이 당신의 상황의 세부 사항에 달려 있다고 생각합니다. 그러나 각 문자 사이에 공백을 추가하고 텍스트 정렬을 정당화하도록 설정할 수 있습니까?
불행히도 당신은 그것이 당신이 필요한 것인지이면 #의 #을 이런 식으로 설정하지 않습니다 ... 그러나 당신은 이런 식으로 간격을 가질 수 있습니다. 이것이 창문의 한 지점이 아니거나 동적 텍스트로 조금 더 복잡한 경우 ... 더 우아한 솔루션을 살펴볼 수 있습니다.