我尝试轮换Border
并让MainWindow
根据Border
轮换所占用的新空间更改其大小。
我设置了SizeToContent="WidthAndHeight"
但是当我旋转边框时窗口大小不会改变。
我是否需要以编程方式为MainWindow设置Width
和Height
,或者可以通过其他方式更改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;
}
答案 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;
}
}}