2009-09-25 41 views
4

我需要顯示一個字符串,每個字符顯示每x個像素。 (x是貫穿整個字符串的)。WPF TextBlock:如何均勻分隔顯示的字符?

例如: 「你好」 - >在位置H(像素)0,E在位置50,升在100,升在150,鄰在200處

我當然可以使用一個TextBlock爲每個字符但似乎矯枉過正。

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

有趣。我不得不添加更多的代碼來支持自定義字體和顏色。謝謝。 – 2009-09-29 16:56:12

2

我想這取決於你的情況的細節,這是否會起作用。 但是,你可以在每個字母之間添加空格,並將文本對齊設置爲合理嗎?

不幸的是,如果這是你所需要的,你不會這樣設置像素數量......但是你甚至可以用這種方式進行間隔。如果這不僅僅是你的窗口上的一個位置,或者對於動態文本來說更復雜一點......那麼你可能希望看看更優雅的解決方案。

+2

斯科特,您的解決方案具有最佳的快速和髒/有效率。自定義字體和al不需要額外的代碼。不幸的是,經過一些測試後,我們不得不放棄它,因爲副作用小。你有我的+1雖然 – 2009-09-29 16:58:23

+0

謝謝,我希望你找到一個很好的解決方案! – Scott 2009-09-29 18:17:27