Wpf 带有ItemTemplate(和滚动条!)

Wpf 带有ItemTemplate(和滚动条!),wpf,xaml,listbox,scroll,Wpf,Xaml,Listbox,Scroll,我有一个数据绑定和itemtemplated列表框: <ListBox x:Name="lbLista" ScrollViewer.VerticalScrollBarVisibility="Visible"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Che

我有一个数据绑定和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>

这些化石显示很好,它们来自一个可观察到的集合


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

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


如果删除ScrollViewer.VerticalScrollBarVisibility=“Visible”,则滚动条仅在需要时出现。

列表框将尝试扩展可用的高度。。当您设置ListBox的Height属性时,您会得到一个实际工作的scrollviewer

如果希望列表框适应可用的高度,可能需要尝试从父控件调节高度。。例如,在网格中,将行定义中的高度设置为“自动”可能会达到以下效果


这是我的答案。我自己也试过了,做了一个空洞的项目,看哪,天堂和七海的全能创造者,它成功了。我最初有一个列表框,它位于root的内部。出于某种原因,ListBox根本不喜欢在StackPanel中


-pom-

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

您应该始终将可滚动内容放置在运行时布局操作期间可解析为已知高度的容器中,以便滚动条大小适当。视觉树中的父容器必须能够解析为实际高度,如果您将RowO定义的高度设置为乌托邦或固定

这也发生在Silverlight中


-em-

你应该真正接受对你有帮助的原始答案,而不是你自己的确认。:-)