Как установить высоту <Linebreak /> - PullRequest
8 голосов
/ 09 февраля 2012

Кто-нибудь знает, как установить высоту <LineBreak /> внутри <TextBlock />?Я пытался изменить размер шрифта TextBlock, но это мне не помогло.

ОБНОВЛЕНИЕ

Мне нужно уменьшить его, а не увеличить.

Ответы [ 3 ]

8 голосов
/ 11 февраля 2012

Единственный способ Одна из возможностей, которую я вижу, это использовать FlowDocumentScrollViewer в качестве содержимого вашего TextBlock. Это позволит вам использовать FlowDocument , который имеет объект Paragraph , который имеет свойства FontSize и LineHeight. Это даст вам возможность изменить высоту LineBreak в определенной степени, это может быть не так мало, как вы хотите.

<Grid>
   <TextBlock LineHeight="1" Height="85" Width="400" HorizontalAlignment="Left" Margin="12,29,0,0" Name="textBlock1" VerticalAlignment="Top" Background="Beige" >
        <FlowDocumentScrollViewer Width="400" VerticalScrollBarVisibility="Hidden" >
            <FlowDocument>
                <Paragraph LineHeight="1" FontSize="12" FontFamily="Arial" Foreground="Red" >
                    <Run> This is a Test of line height</Run>
                 </Paragraph>
                <Paragraph LineHeight="1" FontSize="1"  BorderThickness=" 1" BorderBrush="Black">
                    <LineBreak/>
                </Paragraph >
                <Paragraph LineHeight="1" FontSize="12" FontFamily="Arial" Foreground="Blue">
                    <Run> This is a Test of line height</Run>
                </Paragraph> 
                <Paragraph LineHeight="1" FontSize="2"  BorderThickness=" 1" BorderBrush="Black">
                    <LineBreak />
                </Paragraph>
                <Paragraph   LineHeight="1" FontSize="12" FontFamily="Arial" Foreground="Green" >  
                    <Run> This is a Test of line height</Run>
                </Paragraph>
                <Paragraph LineHeight="1" FontSize="5"  BorderThickness=" 1" BorderBrush="Black">
                    <LineBreak />
                </Paragraph>
            </FlowDocument>
        </FlowDocumentScrollViewer>
    </TextBlock>
</Grid>

Это дало мне такой результат.

enter image description here


Для добавления дополнительной информации. Я полагаю, что большая часть разрыва, который вы видите между строками, связана с LineHeight текстовых строк. Я немного поигрался с этим и придумал это. Он также имеет дополнительное преимущество: он не нуждается в потоковом документе.

<TextBlock LineHeight="9.75" LineStackingStrategy="BlockLineHeight" Margin="12,188,-12,-188">
    <Run> This is a Test of Line Height</Run>
    <LineBreak />
    <Run >This is a Test of Line Height</Run>
    <LineBreak />
    <Run>This is a Test of Line Height</Run>
    <LineBreak />
    <Run> This is a Test of Line Height</Run>
</TextBlock>

Это дало мне результат, который выглядит следующим образом. Это позволит вам пойти меньше, чем вы могли бы

enter image description here

0 голосов
/ 20 июля 2017

У меня была та же проблема, для меня проще всего было использовать TextBlock для каждой строки, задать для TextBlock нижнее поле и сохранить их в StackPanel.

<StackPanel>
    <TextBlock Margin="0,0,0,10">
        This is the text and this text is quite long so it wraps over the end of the line...
    </TextBlock>
    <TextBlock Margin="0,0,0,10">
        This is the text and this text is quite long so it wraps over the end of the line...
    </TextBlock>
</StackPanel>

Вы можете очистить егопоместив стиль поля в общий ресурс.

Быстро и грязно, но это сработало для моих целей.

enter image description here

0 голосов
/ 10 августа 2016

Вот ужасный хак, с которым я столкнулся, столкнувшись с той же проблемой:

// close out paragraph and move to next line
textBlock.Inlines.Add(new LineBreak());
var span = new Span();
// use a smaller size so there's less of a gap to the next paragraph
span.FontSize = 4;
// super awful hack. Using a space here won't work, but tab does
span.Inlines.Add(new Run("\t"));
// now the height of this line break will be governed by the font size we set above, not by the font size of the main text
span.Inlines.Add(new LineBreak());
textBlock.Inlines.Add(span);
...