WPF桌面端开发1-常用组件TextBlock

长文本显示

在WPF中,如果想要处理TextBlock中文本超出部分的显示,通常可以使用以下几种方法来实现文本的裁剪或者显示省略号:

使用TextTrimming属性

TextBlock控件有一个TextTrimming属性,它允许你指定当文本超出控件边界时如何裁剪。常用的选项包括:

  • None: 默认值,不进行裁剪,文本可能会超出控件边界而被遮挡。
  • CharacterEllipsis: 超出部分以省略号(…)表示,适用于单行文本。
  • WordEllipsis: 超出部分以省略号表示,但会确保不会截断单词,适用于单行文本。

示例:

1
2
3
<TextBlock Text="Your long text here"
TextTrimming="CharacterEllipsis"
Width="100"/>

使用ToolTip显示完整文本

如果希望在用户将鼠标悬停在TextBlock上时显示完整的文本内容,可以将ToolTip绑定到Text属性。

示例:

1
2
3
<TextBlock Text="Your long text here"
TextTrimming="CharacterEllipsis"
ToolTip="{Binding Text, RelativeSource={RelativeSource Self}}"/>

使用TextBlock的MaxWidth属性

通过设置TextBlock的MaxWidth属性,可以限制文本的宽度,超出部分会被裁剪。

示例:

1
2
<TextBlock Text="Your long text here"
MaxWidth="100"/>

TextBlock 文本展示

选中和悬浮变色

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<TextBlock
Padding="13"
FontSize="14"
Text="{Binding directorname}"
TextTrimming="CharacterEllipsis">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="{Binding state, Converter={StaticResource ColorTextConvert}}" />
<Setter Property="FontWeight" Value="{Binding state, Converter={StaticResource TextBoldConverter}}" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="#2D8CF0" />
</Trigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>

文字阴影

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<TextBlock
Grid.Row="1"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="14"
Foreground="White"
Text="退出控制">
<TextBlock.Effect>
<DropShadowEffect
Direction="290"
Opacity="0.7"
ShadowDepth="2"
Color="Black" />
</TextBlock.Effect>
</TextBlock>

文本换行

方式1

转义字符换行

代码中

1
this.TextBlock1.Text = "AAAAAAA\nBBBBBBBB";

XAML中

1
<TextBlock Text="AAAAAAA&#x000A;BBBBBB" />

方式2

设置自动换行

1
<TextBlock Width="60" TextWrapping="Wrap" Text="AAAAAAA BBBBBB"/>

方式3

使用InLines属性的LineBreak来换行

简单的来说就是,显示的XAML表示用

1
2
3
4
5
<TextBlock Width="60" TextWrapping="Wrap"> 
<Run>AAAAAA</Run>
<LineBreak/>
<Run>BBBBBB</Run>
</TextBlock>

后台代码添加

1
2
3
TextBlock1.Inlines.Add(New Run("AAAAAA"));
TextBlock1.Inlines.Add(New LineBreak());
TextBlock1.Inlines.Add(New Run("BBBB"));

另外如果RUN里面有大量的文字表示,超过了TextBlock的Width时候,文字会被剪切掉,而不是自动换行,这点需要注意一下