【问题标题】:W7P ListBox doesn't stay scrolled in the emulatorW7P ListBox 不会在模拟器中保持滚动
【发布时间】:2011-04-12 11:12:46
【问题描述】:

我在 Windows Phone 7 应用程序的 xaml 页面中有一个 ListBox。它一开始是空的,然后在从 Web 服务中检索到一些项目后,我用它们填充它。到目前为止,一切正常 - 项目显示在列表中,一切似乎都很好。我遇到的问题是当我尝试将列表拖动到底部时(在模拟器中):我可以向下滚动,但是一旦我释放鼠标按钮,列表就会弹回顶部,就好像我没有滚动它。对它为什么会这样表现有任何见解吗?

<Grid x:Name="ContentPanel" Grid.Row="2" Margin="0,0,0,0" Canvas.ZIndex="0">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/> <!-- EDIT: the problem was "Auto" here should have been "*" -->
    </Grid.RowDefinitions>

    <!-- removed other element for brevity -->

    <ListBox Name="InfoBoardListBox" Grid.Row="1" SelectionChanged="InfoBoardListBox_SelectionChanged"
              Margin="0,0,0,0" FontSize="26.667" />
</Grid>

以及填充列表的方法:

    foreach (InfoBoard entry in boards.Values) {
        item = new ListBoxItem();
        item.Content = entry.Name;
        item.Name = entry.Id.ToString(); //used to tell which entry was clicked
        InfoBoardListBox.Items.Add(item);
    }

【问题讨论】:

    标签: silverlight xaml windows-phone-7 listbox scroll


    【解决方案1】:

    尝试将第二行的高度设置为*而不是Auto;我认为这与 ListBox 认为它的大小与可用空间有关。

    【讨论】:

    • 这看起来已经解决了问题。我一直在寻找一些关于 Auto* 应该做什么的信息,到目前为止还没有运气。从这个例子看,Auto 说在初始页面加载期间计算一次大小,* 说只要有变化就计算出来。
    • 在 RowDefinition 的上下文中,Auto 意味着使行与其内容一样高,但不能更高。 Star 是可用空间的一部分(即在任何固定或自动高度行之后)。如果您有两行都设置为*,那么每行将有一半的高度。这里有一些文档:msdn.microsoft.com/en-us/library/…
    • 那是有道理的。 ListBox 高度将设置为 0 左右,因为它没有内容,并且在添加项目时不调整大小,或者调整屏幕底部的大小。如果是后者,它总是有足够的空间(其中一些在屏幕外)来显示所有项目,这将解释它们弹回原位。 * 绝对是我想要的行为:一个完全占据屏幕剩余高度的列表框。
    猜你喜欢
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多