панорама + список, wp7, текст усекается и прокрутка не работает - PullRequest
0 голосов
/ 25 июля 2011

Я использую элемент управления 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 для привязки к списку выглядит следующим образом.

<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). пользователь ответил, дав мне ссылку на элемент управления, который он сделал, чтобы отобразить очень длинный текст. сообщение на сколько символов может содержать текстовый блок Silverlight? . Когда я использую этот элемент управления и / или подход для хранения длинного текста, я получаю тот же эффект.

1 Ответ

4 голосов
/ 25 июля 2011

Если у вас есть ListBox внутри StackPanel, каркас не может определить высоту элементов управления и должна ли быть включена прокрутка.

Использовать Grid вместо StackPanel внутри вашего DataTemplate.

<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>

Вышесказанное решит вашу непосредственную проблему, но вам также следует принять решение о включении большого количества текста в панораму.
Панорама не предназначена для отображения большого количества текста.Думайте о панораме как об обложке журнала.Вы не включите статью на обложку.Вы бы добавили заголовок или изображение, чтобы побудить зрителя / пользователя читать больше в журнале.Тот же принцип должен применяться здесь.Имейте контент (заголовок / заголовок или эквивалентное изображение) на панораме, чтобы перевести пользователя на другую страницу, где он сможет прочитать весь контент.

...