Xaml 空的LongListSelector具有无限长

Xaml 空的LongListSelector具有无限长,xaml,windows-phone-7,windows-phone-8,windows-phone,longlistselector,Xaml,Windows Phone 7,Windows Phone 8,Windows Phone,Longlistselector,我有一个LongListSelector,它位于StackPanel中。当这个LLS为空时,它有无限长,并且底部的元素看不见 <StackPanel Orientation="Vertical"> <phone:LongListSelector> </phone:LongListSelector> </StackPanel> 但当我将其设置为itemsource时,它会变好。我尝试将其垂直对齐分配到顶部,但没有解决问题 如何使

我有一个
LongListSelector
,它位于
StackPanel
中。当这个LLS为空时,它有无限长,并且底部的元素看不见

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

但当我将其设置为
itemsource
时,它会变好。我尝试将其
垂直对齐
分配到顶部,但没有解决问题 如何使它的大小不填充表单?

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

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

问题:无限长的LongListSelector(LLS)-老实说,这不是问题,它的工作原理应该是这样的。因为LLS可以有很多物品,而且可以很长,就像它的名字所说的那样。问题是在StackPanel中使用它时,没有固定其高度

解决方案:

  • 第一个非常简单-只需设置LLS的高度。你会确信应该在LLS以下的东西会在那里。就像上面提到的@Chris W-在StackPanel中使用LLS并不是最适合的,而且可能会导致很多问题-所以要避免它。

    <StackPanel Orientation="Vertical">
        <phone:LongListSelector Height="300"/>
        <TextBlock Text="Something/>
    </StackPanel>
    
    
    
    堆叠面板的作用是什么?这就是所有相关的xaml吗?另外,我假设您的意思是垂直对齐=“顶部”,因为预计顶部的水平对齐将不起作用:坑中包含更多的元素,包括LLS的顶部和底部。感谢您的注意,我已经修复了它。如果可以避免的话,我不会搞砸
    MeasureOverride
    ,它似乎经常会导致问题。我面前没有一个WP项目要测试,但试着将其嵌入
    网格
    中,并对其应用
    垂直对齐
    ,作为其子元素,LLS应尊重面板的测量。谢谢@ChrisW。使用
    网格
    而不是
    堆叠面板
    意味着全新的设计。现在它起作用了,以后我会避免把它放在那个里!不,你会保留你的SP,只需将LLS单独嵌入其中,不做任何更改,但看起来你得到了解决方案,这才是最重要的。干杯,谢谢你。有一个错误说:
    MeasureOverride of element'Phoney.Extensions.LongListSelectorEx'不应返回PositiveInfinity或NaN作为其所需大小。
    Yeah-问题是宽度没有定义,我如上所述尝试过(已编辑)。如果不想定义宽度,请修改If语句中的返回值(改为this.width put 0)。告诉我它是否有效。
    <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>
    
    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);
          }
       }
    }
    
    <phone:PhoneApplicationPage
     // something before
     xmlns:common="clr-namespace:Extensions"
     // other things
     >
    
    <StackPanel Orientation="Vertical">
        <common:LongListSelectorEx Width="200"/>
        <TextBlock Text="Something/>
    </StackPanel>