Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF:文本旋转和对齐问题_C#_Wpf - Fatal编程技术网

C# WPF:文本旋转和对齐问题

C# WPF:文本旋转和对齐问题,c#,wpf,C#,Wpf,我正在尝试为一个WPF项目创建一个标签,该项目涉及不同前景颜色的部分和一个必须经历180次旋转的特殊角色。我快到了,但是有一些问题 以下是迄今为止的图片: 下面是生成它的XAML: <Viewbox> <StackPanel Margin="5" Background="White" Orientation="Hori

我正在尝试为一个WPF项目创建一个标签,该项目涉及不同前景颜色的部分和一个必须经历180次旋转的特殊角色。我快到了,但是有一些问题

以下是迄今为止的图片:

下面是生成它的XAML:

       <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”。这更好吗?嗨,我自己也想过,但是翻译偏移量有点随意/猜测,我不确定它对字体系列和字体大小的变化会有什么反应,等等。