Xaml ScrollViewer高度计算中的列表框

Xaml ScrollViewer高度计算中的列表框,xaml,windows-phone-7,listbox,grid,scrollviewer,Xaml,Windows Phone 7,Listbox,Grid,Scrollviewer,当我在ScrollViewer中放置一个列表框时,如果我没有为列表框定义一个高度属性,它就不会滚动(除了上下弹跳之外),所以屏幕上的元素是不可访问的。如果我将ListBox上的Height属性设置为它在屏幕上所占的实际高度,它将完美地滚动。如果我没有准确地获得高度,它将无法正确滚动,例如,我可能无法到达列表中的底部元素 在ScrollViewer/ListBox上方和下方的单列LayoutRoot网格中放置其他元素时,我在除ScrollViewer之外的所有行上设置了RowDefinition.

当我在ScrollViewer中放置一个列表框时,如果我没有为列表框定义一个高度属性,它就不会滚动(除了上下弹跳之外),所以屏幕上的元素是不可访问的。如果我将ListBox上的Height属性设置为它在屏幕上所占的实际高度,它将完美地滚动。如果我没有准确地获得高度,它将无法正确滚动,例如,我可能无法到达列表中的底部元素

在ScrollViewer/ListBox上方和下方的单列LayoutRoot网格中放置其他元素时,我在除ScrollViewer之外的所有行上设置了RowDefinition.Height=“Auto”,这会得到“*”。网格似乎相应地正确分配了空间。除了现在,我不知道ScrollViewer/ListBox会占用多少空间

A部分:为什么我必须在列表框上设置高度,它的(虚拟)高度不随元素的数量而变化吗


B部分:似乎我必须手动设置网格行高度,然后在需要更改fontsize或其他样式时手动重新设置网格行高度。是这样吗?这种方法似乎是假的。

您的问题是因为您在ScrollViewer中有一个列表框。不要这样做

Listbox包含一个内部ScrollViewer,通常会扩展到可用空间

通过在ScrollViewer中安装一个ScrollViewer,它不知道应该增加哪一个以适应可用空间,以及它们应该如何相对滚动


让我们知道你想做什么。有一种更好的方法可以做到这一点。

您的问题之所以会出现,是因为您在ScrollViewer中有一个列表框。不要这样做

Listbox包含一个内部ScrollViewer,通常会扩展到可用空间

通过在ScrollViewer中安装一个ScrollViewer,它不知道应该增加哪一个以适应可用空间,以及它们应该如何相对滚动


让我们知道你想做什么。还有更好的方法。

它变得更奇怪:我想要的是一个列表,上面有一些流行的项目,一个不可选择的行,然后是下面的完整列表。如果我将这三个元素放在ScrollView中包含的网格中,则只有底部的列表框滚动,而不是整个网格。这完全是非直觉的。甚至是错的。它变得更加奇怪:我想要的是一个列表,上面有一些流行的项目,一个不可选择的行,然后是下面的完整列表。如果我将这三个元素放在ScrollView中包含的网格中,则只有底部的列表框滚动,而不是整个网格。这完全是非直觉的。甚至错了。如果有人在其他论坛上提到这一点,我就错过了。有了这个补丁,它几乎实现了我想要的。理想情况下,我希望在列表框中放置一个分隔符(我使用的是高度最小的边框)来分隔两个部分,而不是使用由边框分隔的两个列表。我之所以使用后一种方法,是因为列表框允许选择边框。我可以忽略所选的事件,但动画/突出显示仍会发生。不过,我会将原始问题标记为已回答。谢谢好的,通过在代码隐藏中使用ListBoxItems解决了边界问题。我不同意-我发现ListBoxItems中的ScrollViewer不能平滑滚动,而是捕捉到单个项目的高度,当高度可能更大时,这可能会导致问题。将ScrollViewer.HorizontalScrollBarVisibility和ScrollViewer.VerticalScrollBarVisibility设置为Hidden并将列表框封装在ScrollViewer中可以解决此问题,从而允许平滑滚动。我还没有研究是否可以在ListBox ScrollViewer上启用平滑滚动,因为这可能是一个更优雅的解决方案。如果有人在其他论坛上提到这一点,我就错过了。有了这个补丁,它几乎实现了我想要的。理想情况下,我希望在列表框中放置一个分隔符(我使用的是高度最小的边框)来分隔两个部分,而不是使用由边框分隔的两个列表。我之所以使用后一种方法,是因为列表框允许选择边框。我可以忽略所选的事件,但动画/突出显示仍会发生。不过,我会将原始问题标记为已回答。谢谢好的,通过在代码隐藏中使用ListBoxItems解决了边界问题。我不同意-我发现ListBoxItems中的ScrollViewer不能平滑滚动,而是捕捉到单个项目的高度,当高度可能更大时,这可能会导致问题。将ScrollViewer.HorizontalScrollBarVisibility和ScrollViewer.VerticalScrollBarVisibility设置为Hidden并将列表框封装在ScrollViewer中可以解决此问题,从而允许平滑滚动。我还没有研究是否可以在ListBox ScrollViewer上启用平滑滚动,因为这可能是一个更优雅的解决方案。