我需要显示一个字符串,每个x像素显示一个字符。 (x是整个字符串)。
例如:“你好” - > H在位置(像素)0处,e在位置50,1处在100处,1处在150处,o处于200处。
当然,我可以为每个角色使用一个TextBlock,但这似乎有些过分。
TranslateTransform似乎没有做到这一点:它相对于前一个角色的END偏移我的角色,这不是我想要的。
TIA为您提供帮助。
答案 0 :(得分: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
答案 1 :(得分:2)
我想这取决于你的情况的细节是否会起作用。 但是,您可以在每个字母之间添加空格,并将文本对齐设置为合理吗?
不幸的是,如果这就是你所需要的,你就不能以这种方式设置像素数......但你可以通过这种方式获得均匀的间距。如果这不仅仅是您窗口上的一个位置,或者使用动态文本稍微复杂一些......那么您可能需要寻找更优雅的解决方案。