全景+列表框,wp7,文本被截断,滚动不起作用

时间:2011-07-25 15:13:15

标签: windows-phone-7 listbox panorama-control

我正在使用Panorama控件。在每个PanoramaItem中,我有一个ListBox。 ListBox包含一堆TextBlock;原因是因为我正在显示非常长的文本而且从另一篇文章中我发现wp7在显示长文本时有局限性。

例如,我有两个对象定义如下。

public class TextItem {
 public string Text { get; set; }
}

public class DisplayItem {
 public string Header { get; set; }
 public string FullHeader { get; set; }
 public List<TextItem> TextItems { get; set; }
}

我的xaml绑定到List&lt; DisplayItem&gt;如下。

<controls:Panorama ItemsSource="{Binding}">
 <controls:Panorama.HeaderTemplate>
  <DataTemplate>
   <TextBlock Text="{Binding Header}" TextWrapping="Wrap"/>
  </DataTemplate>
 </controls:Panorama.HeaderTemplate>
 <controls:Panorama.ItemTemplate>
  <DataTemplate>
   <StackPanel Orientation="Vertical">
    <TextBlock Text="{Binding FullHeader}" TextWrapping="Wrap"/>
    <ListBox ItemsSource="{Binding TextItems}">
     <ListBox.ItemTemplate>
      <DataTemplate>
       <TextBlock Text="{Binding Text}"/>
      </DataTemplate>
     </ListBox.ItemTemplate>
   </StackPanel>
  </DataTemplate>
 </controls:Panorama.ItemTemplate>
</controls:Panorama>

所有数据都正确绑定,但是,当我尝试滚动ListBox时,它会停止而不会一直到底部。对我来说效果是“滚动不起作用”和“文本被截断”。

关于我做错了什么的任何想法?

作为附注,我还发布了一个关于显示很长文本的问题(即最终用户许可协议EULA)。用户通过向我提供指向他所显示的非常长文本的控件的链接进行响应。帖子位于how many characters can a Silverlight TextBlock hold?。当我使用该控件和/或方法存储我的长文本时,我得到相同的效果。

1 个答案:

答案 0 :(得分:4)

如果在StackPanel中有一个ListBox,框架将无法确定控件的高度以及是否应该启用滚动。

在DataTemplate中使用Grid而不是StackPanel。

<DataTemplate>
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="*" /> 
      <RowDefinition Height="auto" />
    </Grid.RowDefinitions>
    <TextBlock Text="{Binding FullHeader}" TextWrapping="Wrap"/>
    <ListBox ItemsSource="{Binding TextItems}" Grid.Row="1">
      <ListBox.ItemTemplate>
        <DataTemplate>
          <TextBlock Text="{Binding Text}"/>
        </DataTemplate>
      </ListBox.ItemTemplate>
    </ListBox>
  </Grid>
</DataTemplate>

以上内容将解决您的直接问题,但您还应解决设计决策,在全景图中包含大量文字。
全景图不打算显示大量文本。将全景视为杂志封面。你不会在封面上包含一篇文章。您需要添加标题或图片以吸引观众/用户在杂志中阅读更多内容。这里应该采用同样的原则。在panorma上有内容(标题/标题或等效图像)将用户带到另一个页面,在那里他们可以阅读完整的内容。