如果從GroupBox中刪除高度(據我所知,這是你想要做的),那麼它將填充它的容器,除非有一個面板上游強制其自己的尺寸規則。
我使用了這個簡化版本的XAML。我刪除了模板和綁定,並對一些項目進行了硬編碼,以使其獨立;這些更改不會影響佈局的完成方式。
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<GroupBox FontWeight="Bold" Header="Tables" Padding="2">
<ScrollViewer>
<ItemsControl FontWeight="Normal">
<TextBlock>Foo</TextBlock>
<TextBlock>Bar</TextBlock>
<TextBlock>Baz</TextBlock>
</ItemsControl>
</ScrollViewer>
</GroupBox>
</Window>
運行它,你將看到的內容確實做大小以適合窗口,當窗口得到太小,看所有三個項目的滾動條僅啓用。我相信這是你想要的。
所以這個問題很可能是其中一個父面板,一個你沒有在你的示例XAML中顯示。
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<StackPanel>
<GroupBox FontWeight="Bold" Header="Tables" Padding="2">
<ScrollViewer>
<ItemsControl FontWeight="Normal">
<TextBlock>Foo</TextBlock>
<TextBlock>Bar</TextBlock>
<TextBlock>Baz</TextBlock>
</ItemsControl>
</ScrollViewer>
</GroupBox>
</StackPanel>
</Window>
現在組框出現在窗口的頂部,尺寸正好適合其內容:如果你的分組框會顯示一個StackPanel內可能出現你描述的問題。如果您足夠縮小窗口,GroupBox將被切斷 - 因爲它的大小適合其內容,而不是其容器。這聽起來像你正在描述的問題。
原因是StackPanel詢問孩子他們的理想身高是什麼(基於他們的內容),並使用該高度。沒有StackPanel(或類似的東西),默認是尊重控件的VerticalAlignment,如果它被設置爲Stretch的默認值,那麼控件被拉伸以填充其父項。這意味着它不會比它的父母高,這聽起來像你想要的。
解決方案:刪除StackPanel(或任何其他導致您的問題),並使用其他的東西。根據你想要完成的事情,你可能會有更好的DockPanel或Grid的運氣。很難說,不知道更多關於你的佈局。
編輯:好了,它看起來像這個問題的確是HeaderedContentControl
父 - 但不直接。 HeaderedContentControl不是一個面板,所以它不會自己做任何佈局(和它的後代GroupBox沒有這個相同的問題)。問題是它的默認模板 - 其中包括一個StackPanel。好消息是,你可以自由地使用不同的模板,讓我們說一個有DockPanel中,而不是:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<HeaderedContentControl>
<HeaderedContentControl.Style>
<Style TargetType="{x:Type HeaderedContentControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type HeaderedContentControl}">
<DockPanel>
<ContentPresenter ContentSource="Header" DockPanel.Dock="Top"/>
<ContentPresenter/>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</HeaderedContentControl.Style>
<GroupBox FontWeight="Bold" Header="Tables" Padding="2">
<ScrollViewer>
<ItemsControl FontWeight="Normal">
<TextBlock>Foo</TextBlock>
<TextBlock>Bar</TextBlock>
<TextBlock>Baz</TextBlock>
</ItemsControl>
</ScrollViewer>
</GroupBox>
</HeaderedContentControl>
</Window>
如果你省略了<HeaderedContentControl.Style>
部分,這再現了你的問題。但隨着風格的到位,它允許GroupBox填充它的容器,所以ScrollViewer會在你想要的時候得到一個滾動條。
網格的擴展取決於它包含的內容。您需要展示更多的XAML才能獲得準確的答案。 – 2010-12-23 23:12:58
我添加了額外的代碼(雖然格式化出奇) – 2011-01-03 16:33:18