当单个项目大于列表框的大小时,如何让ListBox滚动条工作。
我有一个带有自定义ItemTemplate的ListBox。模板显示用于记笔记的消息和时间戳。问题是如果操作员创建一个非常长的音符,ListBox滚动条不会出现,并且不允许您向上和向下滚动以查看整个音符。该控件适用于几个小音符。如果您在大音符后添加一个小音符,则会出现滚动条,您可以向下滚动,但是您无法看到整个第一个音符,只能看到之前可见的部分,而不是在滚动时捕捉到下一个音符。
<ListBox Grid.Row="1" ItemsSource="{Binding Notes}" HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
<ListBox.ItemTemplate>
<DataTemplate>
<Border Margin="1" Padding="5" BorderThickness="1" BorderBrush="SteelBlue" CornerRadius="3">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0" Text="{Binding CreatedDateTime, StringFormat={}{0:h:mm:ss tt}}" Margin="0,0,20,0"/>
<TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding Note}" TextWrapping="Wrap" FontSize="20"/>
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
图片有助于解释。
答案 0 :(得分:1)
我尝试过ScrollViewer,但最终导致了额外的问题。我不得不开始路由滚动事件而不是触摸事件等。
最后我找到了一个简单的属性来设置。 在ListBox上设置'ScrollViewer.CanContentScroll =“False”'。
这会更改滚动行为,内容不再被切断。所有活动也都有效。
我真的不明白为什么会这样,但我认为它与ListBox有关,以及它如何通过不在屏幕上渲染项目来尝试优化性能。我认为这会禁用性能增强但会使滚动工作,因为它现在为每个项目渲染了空间。