我在用WPF做文字旋转是遇到一个问题,旋转后文字被剪裁掉了,只能显示部分字符。
下面有xaml代码中有一个TextBox内容为“This is a long text will be cut after rotate”, 字符串比较长,我们最外层的Grid Width=100,如果TextBox正常横向显示是不放不下的,这里我本来就需要把文字旋转90°竖排。Grid高度很高 600px, 本来是可以放下整个字符串的,但是旋转之后文字被剪裁掉了,只留下大概100px的长度。
原因分析:大概是因为在旋转之前WPF把字符按照最大宽度100px先剪裁了,再旋转的,所以旋转之后文字变短了。
解决方法:加入margin控制, 左右各加入100px margin,这样原先的TextBox在横向的时候就可以全部放下整个字符串了,所以在旋转之后就可以全部显示出来。这里100px大家可以自己调整。
注意:记得一定要左右加相同的margin,这样旋转之后字符串才能位置原来的Aligment (居左,居中, 居右)
<!-- Top Grid width 100px -->
<Grid Grid.Row="0" Grid.Column="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock x:Name="YAxisLabel" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center"
VerticalAlignment="Center" Text="This is a long text will be cut after rotate" RenderTransformOrigin="0.5,0.5"
TextTrimming="None" Margin="-100,0,-100,0">
<TextBlock.RenderTransform>
<RotateTransform Angle="-90"/>
</TextBlock.RenderTransform>
</TextBlock>
<Canvas Grid.Row="0" Grid.Column="1" Loaded="YAxisCanvs_Loaded">
<Line Canvas.Right="0" Canvas.Bottom="0" X1="0" X2="0" Y1="0" Y2="200" Stroke="Black" StrokeThickness="2"></Line>
</Canvas>
</Grid>