我有以下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>
答案 0 :(得分:2)
具有垂直方向的StackPanel不会限制其子元素的高度。换句话说,除非您显式设置其高度,否则Scrollviewer始终会高到需要显示其全部内容。
您必须选择其他面板,例如网格或DockPanel:
<UserControl ...>
<DockPanel>
<Label DockPanel.Dock="Top" Content="text"/>
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ItemsControl ItemsSource="{Binding Entities}">
...
</ItemsControl>
</ScrollViewer>
</DockPanel>
</UserControl>
答案 1 :(得分:0)
尝试在ScrollViewer
上设置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>