我有以下XAML。我似乎无法解决的问题是我有一个滚动查看器,它围绕一个充满视图的网格(具有固定的高度),但无法让滚动条滚动内容长于窗口大小。
我希望用户控件填充窗口的整个高度,但当网格控件的长度大于窗口大小时,也可以滚动。但是如果我没有手动设置滚动查看器的高度,那么我永远不会得到可滚动的滚动条(在示例中手动设置)。
我查看了网站上的其他示例,但无法找到有效的答案(包括此link)。
XAML:
<UserControl d:DesignWidth="300" d:DataContext="{d:DesignInstance ViewModels:EntityViewModel}">
<StackPanel>
<Label Content=“text” />
<ScrollViewer Height="450" Width="250" VerticalScrollBarVisibility="auto">
<Grid>
<ItemsControl ItemsSource="{Binding Entities}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:EntityView DataContext="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</ScrollViewer>
</StackPanel>
</UserControl>
编辑: 我正在添加一个可以轻松重新创建的示例。需要的是能够使滚动视图可滚动,而停靠面板(可以是网格)具有的内容可以超出插入用户控件的屏幕上的内容(这意味着我无法修复)滚动查看器上的大小)。
<Window Title="MainWindow" Height="200" Width="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<Label Content="title"/>
<ScrollViewer>
<DockPanel>
<Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
<Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
<Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
<Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
<Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
<Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
<Label DockPanel.Dock="Top" Content="title" HorizontalContentAlignment="Center" />
</DockPanel>
</ScrollViewer>
</StackPanel>
</Grid>
</Window>
具有垂直方向的StackPanel不限制其子元素的高度。换句话说,除非您明确设置其高度,否则Scrollviewer将始终保持显示其整个内容所需的最高值。
您必须选择其他面板,例如网格或DockPanel:
<UserControl ...>
<DockPanel>
<Label DockPanel.Dock="Top" Content="text"/>
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ItemsControl ItemsSource="{Binding Entities}">
...
</ItemsControl>
</ScrollViewer>
</DockPanel>
</UserControl>
尝试设置ScrollViewer
on StackPanel
<ScrollViewer Height="450" Width="250" VerticalScrollBarVisibility="auto">
<StackPanel>
<Grid>
<ItemsControl ItemsSource="{Binding Entities}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:EntityView DataContext="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</StackPanel>
</ScrollViewer>