C# WPF:文本旋转和对齐问题
我正在尝试为一个WPF项目创建一个标签,该项目涉及不同前景颜色的部分和一个必须经历180次旋转的特殊角色。我快到了,但是有一些问题 以下是迄今为止的图片: 下面是生成它的XAML:C# WPF:文本旋转和对齐问题,c#,wpf,C#,Wpf,我正在尝试为一个WPF项目创建一个标签,该项目涉及不同前景颜色的部分和一个必须经历180次旋转的特殊角色。我快到了,但是有一些问题 以下是迄今为止的图片: 下面是生成它的XAML: <Viewbox> <StackPanel Margin="5" Background="White" Orientation="Hori
<Viewbox>
<StackPanel Margin="5"
Background="White"
Orientation="Horizontal">
<StackPanel.Resources>
<Style TargetType="TextBlock">
<Setter Property="FontFamily" Value="Trebuchet MS" />
<Setter Property="FontSize" Value="40" />
</Style>
</StackPanel.Resources>
<TextBlock Margin="5,0,0,0"
VerticalAlignment="Bottom"
Foreground="Black"
Text="XXX" />
<TextBlock VerticalAlignment="Bottom"
FontSize="50"
Foreground="Green"
Text="Δ">
<TextBlock.LayoutTransform>
<RotateTransform Angle="180" />
</TextBlock.LayoutTransform>
</TextBlock>
<TextBlock Margin="0,0,5,0"
VerticalAlignment="Bottom"
Foreground="Orange"
Text="YYY" />
</StackPanel>
</Viewbox>
您会注意到,虽然底部对齐问题现在还可以,但这比第一次尝试更糟糕,因为现在特殊字符与“XXX”和“YYY”之间存在间隙。而运行
不支持转换
那么,有谁能帮我做我想做的事吗?也就是说,创建第一个图像,但使用与“XXX”和“YYY”垂直对齐的特殊字符
谢谢。您可以使用“应用渲染变换”稍微调整垂直位置:
<TextBlock.LayoutTransform>
<RotateTransform Angle="180" />
</TextBlock.LayoutTransform>
<TextBlock.RenderTransform>
<TranslateTransform Y="3" />
</TextBlock.RenderTransform>
你在找类似的东西吗 这将使您的代码如下所示:
<TextBlock Margin="5,0,0,0" VerticalAlignment="Center">
<Run Foreground="Black" Text="XXX" BaselineAlignment="Center"/>
<Run FontSize="50" Foreground="Green" Text="Δ" BaselineAlignment="Center" />
<Run Foreground="Orange" Text="YYY" BaselineAlignment="Center" />
</TextBlock>
<Run Foreground="Black" Text="XXX" BaselineAlignment="Center"/>
<TextBlock Magin="-12 0">
<TextBlock.LayoutTransform>
<RotateTransform Angle="180" />
</TextBlock.LayoutTransform>
<Run FontSize="50" Foreground="Green" Text="Δ" />
</TextBlock>
<Run Foreground="Orange" Text="YYY" BaselineAlignment="Center" />
</TextBlock>
更新:
如果要旋转三角形,可以在文本块中添加一个
。看起来是这样的:
<TextBlock Margin="5,0,0,0" VerticalAlignment="Center">
<Run Foreground="Black" Text="XXX" BaselineAlignment="Center"/>
<Run FontSize="50" Foreground="Green" Text="Δ" BaselineAlignment="Center" />
<Run Foreground="Orange" Text="YYY" BaselineAlignment="Center" />
</TextBlock>
<Run Foreground="Black" Text="XXX" BaselineAlignment="Center"/>
<TextBlock Magin="-12 0">
<TextBlock.LayoutTransform>
<RotateTransform Angle="180" />
</TextBlock.LayoutTransform>
<Run FontSize="50" Foreground="Green" Text="Δ" />
</TextBlock>
<Run Foreground="Orange" Text="YYY" BaselineAlignment="Center" />
</TextBlock>
这是一个非常混乱的系统,但它可以工作:
结果是这样的:
<TextBlock Margin="5,0,0,0" VerticalAlignment="Center">
<Run Foreground="Black" Text="XXX" BaselineAlignment="Center"/>
<Run FontSize="50" Foreground="Green" Text="Δ" BaselineAlignment="Center" />
<Run Foreground="Orange" Text="YYY" BaselineAlignment="Center" />
</TextBlock>
<Run Foreground="Black" Text="XXX" BaselineAlignment="Center"/>
<TextBlock Magin="-12 0">
<TextBlock.LayoutTransform>
<RotateTransform Angle="180" />
</TextBlock.LayoutTransform>
<Run FontSize="50" Foreground="Green" Text="Δ" />
</TextBlock>
<Run Foreground="Orange" Text="YYY" BaselineAlignment="Center" />
</TextBlock>
…还有这个,有旋转和边距
你为什么不自己画个三角形呢?文本呈现很复杂。旋转单个字符并对齐这是一个坏主意,除非你自己画(意味着你会注意测量和定位一切)。@Sinatr谢谢你的评论。但我希望首先采用这种方法。在同一行标记上尝试所有跑步。xml翻译假定您有额外的空间。@Andy不确定我理解您所说的“同一行标记”是什么意思?快跑。这些词都在同一行上。您的标记跨越6+行。您好,谢谢您的想法,但这仍然会在“XXX”和“YYY”以及特殊字符之间留下差距。@Cleve一开始我没有领会到这一点。我添加了另一个hack,在包含三角形的文本块中添加'Margin=“-12 0”。这更好吗?嗨,我自己也想过,但是翻译偏移量有点随意/猜测,我不确定它对字体系列和字体大小的变化会有什么反应,等等。