0

我有一个LongListSelector在里面的StackPanel。当这个 LLS 为空时,它的长度是无限的,并且它底部的元素是看不到的。

<StackPanel Orientation="Vertical">
    <phone:LongListSelector>
    </phone:LongListSelector>
</StackPanel>

但是当我设置它时ItemsSource,它会变得很好。我尝试将其分配VerticalAlignment到顶部,但没有解决问题如何使其大小不填满表格?

4

1 回答 1

1

(我已经编辑了这篇文章以使其更好)

首先让我们描述您遇到的问题,为此我们将使用:

问题:无限长的 LongListSelector (LLS) - 老实说,这不是问题,它的工作方式应该如此。因为 LLS 可以有很多很多项目,并且可以很长,就像它的名字一样。问题是您在 StackPanel 中使用它而不修复它的高度。

解决方案

  1. 第一个非常简单 - 只需设置 LLS 的高度。您将确定应该低于 LLS 的内容将在那里。就像@Chris W 提到的那样——在 StackPanel 中使用 LLS 并不是最幸运的,并且会导致很多问题——所以要避免它。

    <StackPanel Orientation="Vertical">
        <phone:LongListSelector Height="300"/>
        <TextBlock Text="Something/>
    </StackPanel>
    
  2. 最优雅和最好的解决方案(也是@Chris W 建议的) - 将您的 LLS 放入 Grid。这种方式有很多优点,并且使用 Rowdefinitions,您的程序将独立于电话分辨率 - 您的所有控件都将存在,如果它们应该存在的话。

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="8*"/>
            <RowDefinition Height="2*"/>
        </Grid.RowDefinitions>
        <phone:LongListSelector Width="100" Grid.Row="0"/>
        <TextBlock Text="Something" Grid.Row="1"/>
    </Grid>
    
  3. 第三种解决方案不如以前的广告那么好,但显示了管理控件的其他方式。您可以覆盖 LLS 的测量方式。但是使用这种方法,您必须注意例如:它可以解决问题,除非您添加的项目太多以至于您的控件将被推离屏幕。此外,您还必须注意必须定义的 this.Width。您必须检查很多附加条件,当然您可以添加更多修改并且它会起作用,但正如我所说的那样,它不如以前的解决方案好。

    namespace Extensions
    {
       public class LongListSelectorEx : LongListSelector
       {
          protected override System.Windows.Size MeasureOverride(System.Windows.Size availableSize)
          {
             if (this.ItemsSource == null)
                return new System.Windows.Size(this.Width, 0);
             if (this.ItemsSource.Count <= 0)
                return new System.Windows.Size(this.Width, 0);
    
             return base.MeasureOverride(availableSize);
          }
       }
    }
    

在您的 xaml 中,您必须添加:

<phone:PhoneApplicationPage
 // something before
 xmlns:common="clr-namespace:Extensions"
 // other things
 >

<StackPanel Orientation="Vertical">
    <common:LongListSelectorEx Width="200"/>
    <TextBlock Text="Something/>
</StackPanel>
于 2013-11-13T21:03:06.067 回答