【问题标题】:ListBox with ItemTemplate (and ScrollBar!)带有 ItemTemplate(和 ScrollBar!)的 ListBox
【发布时间】:2010-10-03 18:27:52
【问题描述】:

我有一个数据绑定和 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 附加属性,但它们不影响这种情况。

【问题讨论】:

    标签: wpf xaml listbox scroll


    【解决方案1】:

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

    如果您删除ScrollViewer.VerticalScrollBarVisibility="Visible",那么滚动条只会在您需要时出现。

    【讨论】:

      【解决方案2】:

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

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

      这也发生在 Silverlight 中。

      -em-

      【讨论】:

        【解决方案3】:

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

        -pom-

        【讨论】:

        • 您应该真正接受对您有帮助的原始答案,而不是您自己的确认。 :-)
        【解决方案4】:

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

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

        HTH

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多