34

我有一个数据绑定和 itemtemplated 列表框:

<ListBox x:Name="lbLista" 
         ScrollViewer.VerticalScrollBarVisibility="Visible">
    <ListBox.ItemTemplate>
      <DataTemplate>
        <StackPanel Orientation="Horizontal">
          <CheckBox IsChecked="{Binding Deleteable, Mode=TwoWay}" />
          <Label Content="{Binding Name}" />
        </StackPanel>
      </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

这些项目显示良好,它们来自 ObservableCollection。

问题是出现但无法使用的滚动- 它没有可抓取的手柄。我尝试在 ListBox 上设置一些 ScrollView 附加属性,但它们不会影响情况。

4

4 回答 4

31

我将您的代码粘贴到测试项目中,添加了大约 20 个项目,我得到了可用的滚动条,没问题,它们按预期工作。当我只添加几个项目(不需要滚动)时,我没有可用的滚动条。会是这样吗?你没有添加足够的项目?

如果您删除,ScrollViewer.VerticalScrollBarVisibility="Visible"则滚动条仅在您需要它们时出现。

于 2009-01-27T14:32:50.653 回答
10

ListBox 将尝试扩展可用的高度。当您设置 ListBox 的 Height 属性时,您会得到一个实际工作的滚动查看器...

如果您希望您的列表框适应可用的高度,您可能想尝试从您的父控件调节高度。例如,在网格中,在 RowDefinition 中将高度设置为自动可能会奏效...

高温高压

于 2009-01-27T14:40:10.500 回答
5

我从来没有在堆栈面板内放置任何可滚动内容(任何从 ScrollableContainer 派生的内容。堆栈面板有一个奇怪的布局机制,当测量操作完成时会混淆子控件,我发现垂直大小最终是无限的,因此不受限制- 所以它超出了容器的边界并最终被剪裁。滚动条不显示,因为控件认为它拥有世界上所有的空间,而实际上它没有。

您应该始终将可滚动内容放置在可以在运行时的布局操作期间解析为已知高度的容器中,以便滚动条的大小适当。可视树中的父容器必须能够解析为实际高度,如果您将 RowDefinition o 的高度设置为自动或固定,则会在网格中发生这种情况。

这也发生在 Silverlight 中。

-em-

于 2012-04-28T21:27:01.073 回答
0

谢谢回答。我自己也尝试过一个空项目,并且 - 看哪,天堂和七海的全能创造者 - 它奏效了。我最初有 ListBox 在里面,它在 root 里面。出于某种原因,ListBox 根本不喜欢在 StackPanel 中!=)

-pom-

于 2009-01-27T14:50:14.363 回答