WPF旋转文本

时间:2014-01-08 11:42:20

标签: wpf rotation

我试着做这样的事情:

enter image description here

我有一个带有我自己对象的List,在这个List中我有绘制它的所有信息,我有一个Listbox,每个图都是我在画布位置绘制的Listbox项。

我的问题是当我想要绘制名称时,因为我必须旋转名称并在名称的矩形内绘制它,但是当我旋转名称时我不知道如何在内部绘制它矩形。

我将这个数据模板用于我的列表框ItemTemplate,我根据是否要绘制图像或名称来设置可见性。

<DataTemplate x:Key="templateList">
    <Canvas >
        <WrapPanel 
                  Visibility="{Binding IsStone, Converter={StaticResource converterCheckIsVisibleName}}"
                  Width="{Binding ObjectName.Width}"
                  Height="{Binding ObjectName.Height}">

                <TextBlock Text="{Binding ObjectName.Name}" >
                    <TextBlock.RenderTransform>
                        <RotateTransform Angle="{Binding ObjectName.Rotate}" />
                    </TextBlock.RenderTransform>
                </TextBlock>
            </WrapPanel>


           <Border BorderThickness="1"  BorderBrush="Black" 
                        Visibility="{Binding IsStone, Converter={StaticResource converterCheckIsVisibleStone}}">
                    <Image Source="{Binding ObjectIMG.PathImagen}" 
                           Height="{Binding ObjectIMG.Height}"
                           Width="{Binding ObjectIMG.Width}"
                           Stretch="Fill" />
                </Border>

            </Canvas>                                        
        </DataTemplate>

1 个答案:

答案 0 :(得分:8)

我不能100%确定您的问题是什么,但似乎您只想旋转一些文字并将其放入矩形中。 Rectangle类不会使用内容元素,因此您无法使用它,但可以使用简单的Border元素。

另一件需要注意的事情是,您应该使用在布局传递之前出现LayoutTransform,而不是之后应用的RenderTransform。有关详细信息,请参阅MSDN上的FrameworkElement.LayoutTransform Property页面。尝试这样的事情:

<Border BorderBrush="Black" BorderThickness="5">
    <TextBlock Text="{Binding ObjectName.Name}" >
        <TextBlock.LayoutTransform>
            <RotateTransform Angle="{Binding ObjectName.Rotate}" />
        </TextBlock.LayoutTransform>
    </TextBlock>
</Border>