2012-02-14 5 views
1

複数のTextBlockがある行(つまり、水平方向のStackPanel)に配置されている場合、1つのTextBlockのように見えるはずです。しかし、私は以下のが見つかりました:TextBlockの内部マージン

enter image description here

最初の行は "EEEE" を表示TextBlockのです。 2つ目は、4つのTextBlockを含むStackPanelで、各TextBlockには「e」が含まれています。上の写真から分かるように、2行目は最初の行より少し長くなります。 TextBlockに内部マージンがあるように見えます。しかし、私の場合、私はそれを防止したいと思います。 これはどうやって行うのか分かりますか?

答えて

1

TextBlockPaddingMarginをゼロに設定してみてください。

<TextBlock Padding="0" Margin="0" ... /> 

あなたはあなたがこれをしたいしようとしている複数のテキストブロックを持っているので、あなたが可能性使用Styleはこれを行うために必要があります。

<StackPanel Orientation="Horizontal"> 
    <Style TargetType="TextBlock"> 
     <Setter Property="Padding" Value="0" /> 
     <Setter Property="Margin" Value="0" /> 
    </Style> 

    ... 
</StackPanel> 

これが解決しない場合は、負のマージンの使用を開始できます。テキストの間の間隔は、フォントサイズやテキストに依存するため、

Margin="-1,0,0,0" 

しかし、これはあなたのコードに脆性が導入されましたが表示されます。たとえば、フォントサイズを13に変更すると、5つの小文字の「e」でこの問題は発生しなくなります。ただし、テキストを大文字の「E」に変更すると同じ問題が発生します。

TextBlockのクリッピングプロパティを使用してみても、レンダリングの影響を受けることはできますが、テキストを数ピクセル調整するだけのようです。 2つのテキストサンプルを同じように見せようとしている理由を聞かせてもらえますか?

更新: 私はこの作業をあなたがしたいと思うようにする良い方法があると思います。 RichTextBoxを使用したり、カスタムコントロールを作成したりする必要があります。

Hereは、テキストハイライト付きの良い例です(前景の強調表示ですが)。

+0

それは役に立たなかった... – andrew

+0

ええと、それは私が思ったよりも複雑に思えます。私はいくつかのコメントで私の答えを更新しました。 –

+0

私はそれをやっている理由は、いくつかの個々の部分をハイライト表示できるHighlightedTextBlockコントロールを実装していることです(highligtightingというのは、フォアグラウンドではなく背景色を変更することを意味します)。そして、それはアイテムテンプレートリストボックスに表示され、アイテムは動的に強調表示され、検索されたテキストが表示されます。あなたが言及したように、テキストの間隔はフォントサイズと表示されるテキストに依存しますが、検索されたテキストが変更されたときに項目の一部がシフトされることは本当に目立ちます。 – andrew

関連する問題