2012-06-11 36 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來做到這一點。我將在旋轉過程中使用主窗口位置來模擬效果!再次感謝你! –