2

我尝试旋转 aBorderMainWindow根据旋转占用的新空间更改他的大小Border。我已经设置SizeToContent="WidthAndHeight",但是当我旋转边框时窗口大小不会改变。

我是否需要以编程方式为 MainWindow 设置WidthandHeight或者这可以通过其他方式更改 xaml 代码来实现?

我的xml代码:

<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

1 回答 1

4

使用LayoutTransform代替RenderTransform

来自 MSDN:转换概述

  • 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;
    }
}}
于 2012-06-11T10:59:37.283 回答