我在scrollviewer中有一个带有scrollviewer的窗口,是一个usecontrols的集合,可以从总空到无穷大。我希望窗口的高度适合屏幕的高度,以便它不会溢出,我也希望如果没有使用后面的代码因为我使用MVVM模式..
由于
<Window x:Class="FreePIE.GUI.Shells.CurveSettingsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="CurveSettingsView" Background="{DynamicResource WindowBackgroundBrush}" SizeToContent="WidthAndHeight" MinHeight="200" MinWidth="200">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ScrollViewer>
<ItemsControl x:Name="Curves" Grid.Row="0"></ItemsControl>
</ScrollViewer>
<Button x:Name="AddCurve" Width="150" Grid.Row="1">Add new curve</Button>
</Grid>
</Window>
答案 0 :(得分:0)
如果我理解正确,您希望ItemsControl
占用所有可用空间,并调整其内容的大小,以便不需要ScrollViewer来查看所有项目
如果是这种情况,请将ItemsPanelTemplate
中的默认ItemsControl
替换为占用所有可用空间的控件,例如DockPanel
。默认ItemsPanelTemplate
是StackPanel
,它会根据需要增长。
<ItemsControl x:Name="Curves" Grid.Row="0">
<!-- ItemsPanelTemplate -->
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<DockPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<!-- ItemContainerStyle -->
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="DockPanel.Dock" Value="Top" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
如果您希望所有商品的尺寸相同,我建议您使用UniformGrid
代替DockPanel
,并将Rows
属性绑定到集合中的商品数量。
<ItemsControl x:Name="Curves" Grid.Row="0">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="{Binding
RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}},
Path=Items.Count}" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>