如何使 WPF TextBlock 在多行上显示我的文本?

问题描述 投票:0回答:6
wpf xaml
6个回答
107
投票

嵌套堆栈面板将导致文本框正确换行:

<Viewbox Margin="120,0,120,0">
    <StackPanel Orientation="Vertical" Width="400">
        <TextBlock x:Name="subHeaderText" 
                   FontSize="20" 
                   TextWrapping="Wrap" 
                   Foreground="Black"
                   Text="Lorem ipsum dolor, lorem isum dolor,Lorem ipsum dolor sit amet, lorem ipsum dolor sit amet " />
    </StackPanel>
</Viewbox>

52
投票

使用

TextWrapping
元素的属性
TextBlock

<TextBlock Text="StackOverflow Forum"
           Width="100"
           TextWrapping="WrapWithOverflow"/>

45
投票

使用换行符:

<TextBlock>
        <Run Text="Line1"/>
        <LineBreak/>
        <Run Text="Line2" FontStyle="Italic" FontSize="9"/>
        <LineBreak/>
        <Run Text="Line3"/>
    </TextBlock>

请参阅:https://social.msdn.microsoft.com/Forums/vstudio/en-US/51a3ffe4-ec82-404a-9a99-6672f2a6842b/how-to-give-multiline-in-textblock?forum=wpf

谢谢,

RDV


4
投票

事情就到此为止了。没有 ActualFontSize 属性,但有 ActualHeight 并且与 FontSize 相关。目前这仅适用于原始渲染的尺寸。我不知道如何将转换器注册为调整大小事件。实际上可能需要将 FontSize 注册为调整大小事件。请不要因为我的答案不完整而对我进行标记。我无法将代码示例放在评论中。

    <Window.Resources>
        <local:WidthConverter x:Key="widthConverter"/>
    </Window.Resources>
    <Grid>
        <Grid>
            <StackPanel VerticalAlignment="Center" Orientation="Vertical" >
                <Viewbox Margin="100,0,100,0">
                    <TextBlock x:Name="headerText" Text="Lorem ipsum dolor" Foreground="Black"/>
                </Viewbox>
                <TextBlock Margin="150,0,150,0" FontSize="{Binding ElementName=headerText, Path=ActualHeight, Converter={StaticResource widthConverter}}" x:Name="subHeaderText" Text="Lorem ipsum dolor, Lorem ipsum dolor, lorem isum dolor, Lorem ipsum dolor, Lorem ipsum dolor, lorem isum dolor, " TextWrapping="Wrap" Foreground="Gray" />
            </StackPanel>
        </Grid>
    </Grid>        

转换器

    [ValueConversion(typeof(double), typeof(double))]
    public class WidthConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            double width = (double)value*.7;
            return width; // columnsCount;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    } 

2
投票

如果您只是想让标题字体比其他字体大一点,您可以使用 ScaleTransform。所以你不依赖于真实的字体大小。

 <TextBlock x:Name="headerText" Text="Lorem ipsum dolor">
                <TextBlock.LayoutTransform>
                    <ScaleTransform ScaleX="1.1" ScaleY="1.1" />
                </TextBlock.LayoutTransform>
  </TextBlock>

0
投票

以上所有答案都不能满足我的需求,我很确定这里的大多数人都会遇到类似的问题。 我想要的是将包含换行符的字符串属性绑定到文本块,并使其显示在多行而不是单行中。 WPF 似乎没有一个简单的解决方案,所以我找到了自己的小解决方法。我使用具有自定义样式的文本框,该样式将禁用其可编辑性并使其看起来像文本块。就像一个魅力,还有一个额外的好处,人们现在可以从您的文本块复制文本,这至少在我的所有应用程序中是一个胜利!

<Style  TargetType="{x:Type TextBox}" x:Key="TextBlock">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Setter Property="BorderThickness" Value="0"/>
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="IsReadOnly" Value="True"/>
    <Setter Property="FontSize" Value="12"/>
    <Setter Property="VerticalContentAlignment" Value="Left"/>
</Style>

可以这样使用:

<TextBox Style="{StaticResource TextBlock}" Text="{Binding UpdateChanglog}"/>

看起来像这样:

文本绑定为:

•Update is from server!
•The camera now actually works
•Images are sharp
•Network is great
•Everybody happy
© www.soinside.com 2019 - 2024. All rights reserved.