我的谷歌和stackoverflow搜索福已經失敗了我,所以我向社區提出這個問題。StackPanel中的網格:爲什麼auto和*的行爲很奇怪?
(這是使用VS2010和.NET 4.0所有生成,在一個空白的默認WPF解決方案)
考慮以下XAML:
<StackPanel Orientation="Horizontal">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Name="aborder" Grid.Column="0" Grid.ColumnSpan="2"
Background="Red" Width="200"/>
<Border Name="aborder2" Background="Green"/>
</Grid>
</StackPanel>
,你能預測 「aborder2」 的寬度什麼是?
如果你猜「20像素」,你會錯的。正確的答案是110像素。
考慮這個XAML:
<StackPanel Orientation="Horizontal">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Border Name="aborder" Grid.Column="0" Grid.ColumnSpan="2"
Background="Red" Width="200"/>
<Border Name="aborder2" Background="Green"/>
</Grid>
</StackPanel>
什麼,你能預測 「aborder2」 的寬度呢?
如果你猜對了20像素或110像素,你會錯的。正確答案是200像素。
我無法弄清楚,它讓我瘋狂。似乎答案應該是顯而易見的;顯然,自動填充網格列和導致網格畸形的堆疊面板之間存在一些相互作用。但它似乎並沒有使有意義 - 無論規則如何規定,這種行爲似乎都是任意的。爲什麼110像素?爲什麼不是109像素或100像素?我會理解,如果自動調整大小的列未能完全展開或者其他東西,但是讓固定寬度的列隨機忽略其寬度,則會讓我失去開發人員的外殼。
任何幫助或指導燈將不勝感激!
爲什麼不aborder2得到Grid.Column? – 0x4f3759df
我沒有想過要放入一個,因爲它應該默認爲第0列。我只是測試它,明確設置列似乎沒有什麼區別。 – pfw
對你有一個答案,但我必須首先回家 –