旋转边框不会改变窗口大小

时间:2012-06-11 10:54:01

标签: c# wpf

我尝试轮换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;
            }

1 个答案:

答案 0 :(得分: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;
    }
}}