【发布时间】:2013-10-01 12:33:11
【问题描述】:
下午好!
我不想打扰你们,但我对 WPF 中的窗口“高度”属性没有什么疑问,当它具有“自动”值时。因为我想了解这里的事情是如何运作的。这是 XAML 代码:
<Window x:Class="WpfTest.MainWindow"
x:Name="window"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Collapsed and Hidden buttons comparison" Width="500">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<StackPanel Height="50" Grid.Column="0" Margin="5,0">
<Button Visibility="Collapsed">This is collapsed button</Button>
<Button >Below collapsed button</Button>
</StackPanel>
<StackPanel Height="50" Grid.Column="1" Margin="5,0">
<Button Visibility="Hidden">This is hidden button</Button>
<Button >Below hidden button</Button>
</StackPanel>
</Grid>
</Window>
当我使用明确的高度时:
Height="300"
或
SizeToContent="WidthAndHeight"
在宽度之前一切都很完美,但是当我不输入或删除默认高度时,窗口有这种奇怪的外观。
在属性中“高度”的值为“自动”。当我使用程序代码获取实际高度时,它是 526。
MessageBox.Show(Convert.ToString(window.Height),"Height of the window");
有人可以解释一下为什么窗口会这样(我的意思是它从哪里获取高度)。提前致谢。
【问题讨论】:
-
这里到底有什么奇怪的地方?它必须有一些高度。
-
新建 WPF 窗口时的默认高度是 350,为什么当我删除这个值时它正好变成 526?
-
@MattBurland 是的,但我认为他暗示他希望高度为 50 或接近。
-
请参阅here 了解有关如何计算窗口大小的信息。当您创建新窗口时,350 只是设计器的默认值。 526 可能是
MinHeight的默认值,但我不会依赖它。 -
这实际上超出了 WPF 的范围。当您使用
Double.NaN(在 XAML 中也称为Auto)时,WPF 在调用 Win32 的CreateWindow时会通过CW_USEDEFAULT。 Windows 有一个特定的(undocumented)算法来放置和调整窗口大小,这就是你所看到的。更多信息msdn.microsoft.com/en-us/library/ms632679