如果单个项目超出控件高度,WPF列表框无法显示内容

时间:2017-01-10 14:46:49

标签: c# wpf xaml listbox

当单个项目大于列表框的大小时,如何让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>

图片有助于解释。

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

我尝试过ScrollViewer,但最终导致了额外的问题。我不得不开始路由滚动事件而不是触摸事件等。

最后我找到了一个简单的属性来设置。 在ListBox上设置'ScrollViewer.CanContentScroll =“False”'。

这会更改滚动行为,内容不再被切断。所有活动也都有效。

我真的不明白为什么会这样,但我认为它与ListBox有关,以及它如何通过不在屏幕上渲染项目来尝试优化性能。我认为这会禁用性能增强但会使滚动工作,因为它现在为每个项目渲染了空间。