2011-12-20 45 views
1

我包裹在一个边界TextBlock控制,所以我可以看到发生了什么占用空间:垂直旋转文本块占据了整个宽度,好像它是水平

enter image description here

这里是XAML:

<Border BorderBrush="Cyan" BorderThickness="3"> 
    <TextBlock Style="{StaticResource subtitle}" Text="{Binding Title}" > 
     <TextBlock.RenderTransform> 
      <RotateTransform Angle="90" /> 
     </TextBlock.RenderTransform> 
    </TextBlock> 
</Border> 

的问题是,这是占用更多的空间比我需要它,如果我一个静态的宽度为它,我得到这个:

enter image description here

有什么建议吗?

+3

是否有可能分配给Setter属性的LayoutTransform,并从那里增加或减少边界..? – MethodMan 2011-12-20 18:22:02

回答

6
<Setter Property="LayoutTransform"> 
    <Setter.Value> 
     <RotateTransform Angle="90" /> 
    </Setter.Value> 
</Setter> 

这发梗,因为像大多数Web应用程序库有一系列得到触发/解雇大部分我们都采用看到或者在渲染事件发生处理..届时页面有活动已经提供了可以这么说,我不是100%确定,但我真的认为LayoutTransform发生在预渲染

+1

啊哈!我不得不使用LayoutTransform而不是RenderTransform。古拉爵! – 2011-12-20 18:23:53

+0

男人我很高兴我有一个很好的记忆..很高兴我能快速帮助你..投票UP..LOL – MethodMan 2011-12-20 18:24:49

+2

@SergioTapia'LayoutTransform'工作的原因是因为它在TextBlock被渲染之前被应用。在渲染TextBlock之后应用“RenderTransforms”,并在UI中阻止了它的空间。 DJ,如果你想添加一个这样的解释到你的答案,我会投它:) – Rachel 2011-12-20 18:28:48

0

我在运行时创建文本块并旋转它们时有同样的问题。 我解决它只是通过设置

tb.Margin = ....... 
tb.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Left; 
tb.VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Top; 
RotateTransform rt = new RotateTransform(); 
rt.Angle = -40; 
tb.RenderTransform = rt; 

它好像你不设置这些参数,变换是做在居中文本的Calcs(计算),增加宽度,你想将它定位...