4

各文字が x ピクセルごとに表示される文字列を表示する必要があります。(x は文字列全体を横切っています)。

例: "Hello" -> H は位置 (ピクセル) 0、e は位置 50、l は 100、l は 150、o は 200 です。

もちろん、各文字に TextBlock を使用することもできますが、やり過ぎのようです。

TranslateTransform はうまくいかないようです: 前の文字の END に対して相対的に文字をオフセットしますが、これは私が望んでいるものではありません。

あなたの助けのためのTIA。

4

2 に答える 2

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"/>

結果:

代替テキスト http://img199.imageshack.us/img199/8022/screenshotud.png

于 2009-09-25T09:44:43.267 に答える
3

これがうまくいくかどうかは、あなたの状況の詳細に依存すると思います。しかし、各文字の間にスペースを追加し、テキストの配置を揃えるように設定できますか?

残念ながら、必要な場合はこの方法でピクセル数を設定することはできません...しかし、この方法で間隔を均等にすることはできます。これがウィンドウ上の1つの場所だけではない場合、または動的テキストでもう少し複雑な場合は、よりエレガントなソリューションを検討することをお勧めします。

于 2009-09-25T19:25:08.733 に答える