我有一个显示WPF控件列表的ListBox
。
我的问题是垂直滚动条显示但是即使有足够的项目ListBox
应该可滚动,也会被禁用。
另一个可能相关的事实是,它包含在Integration.ElementHost
。
WPF noobie,Jim
以下是ListBox
:
// for brevity I removed the Margin and Tooltip attributes
<Grid x:Class="Xyzzy.NoteListDisplay"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel Name="stackPanel" Orientation="Vertical"
ScrollViewer.VerticalScrollBarVisibility="Visible">
<StackPanel Orientation="Horizontal">
<CheckBox Name="AllRecent" IsChecked="False" >View All Recent</CheckBox>
<CheckBox Name="AscendingOrder" IsChecked="False">Descending Order</CheckBox>
<Button Name="btnTextCopy" Click="btnCopyText_Click">Copy All</Button>
</StackPanel>
<ListBox Name="NoteList"
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Visible">
</ListBox>
</StackPanel>
</Grid>
每个ListBox
项目中显示控件的XAML:
<UserControl x:Class="Xyzzy.NoteDisplay"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBlock Name="Heading" FontSize="10">Note Heading</TextBlock>
<Button Name="btnCopyText" Height="20" FontSize="12"
Click="btnCopyText_Click">Copy
</Button>
</StackPanel>
<TextBlock Name="Body" FontSize="14">Note Body</TextBlock>
</StackPanel>
</Grid>
</UserControl>
答案 0 :(得分:27)
使用StackPanel
时,滚动条可见性出现问题。我认为这是因为StackPanel
始终与包含其所有孩子所需的一样大。尝试重新组织布局以删除StackPanel
(改为使用Grid
)并查看是否有帮助。
答案 1 :(得分:5)
您只需要引入 Height
属性,如下所示:
<ListBox Height="200"
Name="NoteList"
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Visible">
</ListBox>
答案 2 :(得分:3)
Heya,我怀疑可能发生的事情是你的ListBox对于每个项目都在扩展,但是ListBox实际上正在从Containing Control的底部消失。
ListBox是否实际上正确停止或者它似乎消失了?尝试在ListBox上设置MaxHeight,看看是否显示滚动条。您应该能够将VerticalScrollBarVisibility设置为Auto,以使其仅在需要时显示。
答案 3 :(得分:2)
如果列表框位于StackPanel内,请尝试使用ListBox
的这些步骤这应该强制显示滚动条。
答案 4 :(得分:1)
这已经很晚了,但任何使用ListBox的人都可能不应该在StackPanel中使用它。一旦我将Listbox的父控件从StackPanel切换到DockPanel,LastChildFill = True(列表框是最后一个控件),我的滚动条工作得很好。
希望这可以帮助那些问题没有被上述答案解决的人。
答案 5 :(得分:0)
此问题的另一个解决方案效果很好,就是在ScrollViewer
周围加StackPanel
。
答案 6 :(得分:0)
对Dave进行修改的另一个解决方案是仅使用ScrollViewer。您只能通过将鼠标放在ScrollView的ScrollBar上进行滚动。我这样使用它是因为我不喜欢ListBox如何从一个项目跳到另一个项目,有时候会从顶部丢失项目。眼睛也有点难受。我喜欢ScrollViewer的流畅滚动。
答案 7 :(得分:0)
我刚刚遇到了同样的问题,这里有一个关于代码项目的小代码演示,可以直观地显示它。
(如果你想节省自己编写代码的时间,自己看看差异:))
http://www.codeproject.com/Tips/659066/ListBox-and-Panels-in-WPF