2012-06-11 35 views
2

我尝试旋转Border并使MainWindow根据Border旋转所采用的新空间更改其大小。 我已经设置了SizeToContent="WidthAndHeight",但是当我旋转边框时,窗口大小不会发生变化。旋转边框不会更改窗口大小

我是否需要以编程方式为MainWindow设置WidthHeight,或者可以通过其他方式更改xaml代码?

我的XAML代码:

<Window x:Class="MyClass.MainWindow" 
     WindowStyle="None" AllowsTransparency='True' 
     Topmost='False' Background="Transparent" ShowInTaskbar='False' 
     SizeToContent="WidthAndHeight" WindowStartupLocation="Manual"> 
    <Border Name="MyBorder" 
      BorderBrush="Transparent" 
      Background="Transparent" 
      HorizontalAlignment="Left" 
      VerticalAlignment="Top" 
      RenderTransformOrigin="0.5,0.5"> 
    </Border> 
</Windows> 

c#代码上Window_KeyDown

# RotateTransform rt = new RotateTransform()在类级别声明。

if (e.Key == Key.I) 
       { 
        if (rt.Angle + 1 < 360) 
        { 
         rt.Angle += 1;      
        } 
        else 
        { 
         rt.Angle = 0;     
        }  



       MyBorder.RenderTransform = rt; 
      } 

回答

4

使用LayoutTransform代替RenderTransform

从MSDN:Transforms Overview

  • LayoutTransform - 甲在所述布局传递之前施加变换。在应用变换之后,布局系统会处理元素的变换大小和位置。

  • RenderTransform - 修改元素外观但在布局过程完成后应用的变换。通过使用RenderTransform属性而不是LayoutTransform属性, 可以获得性能优势。

<Border Name="MyBorder" 
     BorderBrush="Transparent" 
     Background="Transparent" 
     HorizontalAlignment="Left" 
     VerticalAlignment="Top" 
     RenderTransformOrigin="0.5,0.5"> 
    <Border.LayoutTransform> 
     <RotateTransform Angle="90"/> 
    </Border.LayoutTransform> 
</Border> 

所以你的情况

RotateTransform rt = new RotateTransform(0.0, 0.5, 0.5); 
private void Window_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.I) 
    { 
     if (rt.Angle + 1 < 360) 
     { 
      rt.Angle += 1; 
     } 
     else 
     { 
      rt.Angle = 0; 
     } 
     MyBorder.LayoutTransform = rt; 
    } 
}} 
+0

谢谢!为什么轮换不是来自边界的中心? –

+0

在'LayoutTransform'中,'TranslateTransform'没有效果。该元素将位于其父容器中。根据你的情况,“Horizo​​ntalAlignment =”Center“'和VerticalAlignment =”Center“'可能会做你想做的事情 –

+0

我已经在MSDN上阅读了足够的内容,理解我不能用LayoutTransform来做到这一点。我将在旋转过程中使用主窗口位置来模拟效果!再次感谢你! –