2011-01-02 13 views
5

mam ListBox który ma StackPanel s gospodarstwa TextBlock oraz Image poziomo, a następnie przez ContentPresenter. To właśnie XAML wygląda następująco:WP7 TextBlock wewnątrz ListBox nie owijania tekst

<Grid x:Name="ContentPanel" 
     Grid.Row="1" 
     Margin="12,0,12,0"> 
    <ListBox x:Name="MainListBox" 
      Margin="12,0,12,0" 
      SelectionChanged="MainListBox_SelectionChanged"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 

     <StackPanel> 
      <toolkit:ContextMenuService.ContextMenu> 
      <toolkit:ContextMenu x:Name="ContextMenu" 
           Opened="ContextMenu_Opened"> 
       <toolkit:MenuItem Header="edit" 
           Tag="edit" 
           Click="MenuItem_Click" /> 
       <toolkit:MenuItem Header="delete" 
           Tag="delete" 
           Click="MenuItem_Click" /> 
      </toolkit:ContextMenu> 
      </toolkit:ContextMenuService.ContextMenu> 
      <StackPanel Orientation="Horizontal" 
         HorizontalAlignment="Left"> 

      <!-- **** This text won't wrap **** --> 
      <TextBlock Text="{Binding Header}" 
         TextWrapping="Wrap" 
         Style="{StaticResource PhoneTextNormalStyle}" 
         Foreground="{StaticResource PhoneAccentBrush}" /> 

      <Image Source="/image.png" 
        Visibility="{Binding ImageVisibility}" /> 

      </StackPanel> 

      <ContentPresenter Content="{Binding Content}" 
          HorizontalAlignment="Stretch" /> 

     </StackPanel> 

     </DataTemplate> 
    </ListBox.ItemTemplate> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
     <Setter Property="HorizontalContentAlignment" 
       Value="Stretch" /> 
     </Style> 
    </ListBox.ItemContainerStyle> 
    </ListBox> 
</Grid> 

ja ustawiania ItemsSource z ListBox do ObservableCollection w konstruktora strony. Wszystko działa poprawnie, dopóki tekst nie staje się zbyt długi, w takim przypadku nie jest zawijany, tak jak to określiłem. Jak zmusić TextBlock do zawijania tekstu?

Dzięki za pomoc!

Odpowiedz

8

Jest to prawdopodobnie wynik nie ograniczania szerokości blokady TextBlock, więc rośnie poziomo poza ekranem, na którym go nie widać.

+0

Ale czy właściwość TextWrapping nie powinna o to dbać? Czy istnieje inny sposób rozwiązania tego problemu? Na przykład, używanie Gridów zamiast StackPaneli do przechowywania UIElements. – Praetorian

+0

Nie jestem pewien, w jaki sposób TextWrapping będzie wiedział, jaka jest granica pozioma, jeśli nie jest w jakiś sposób ograniczona. –

+0

Miałeś rację, naprawiłem problem przez dodanie zdarzenia 'SizeChanged' do' TextBox' i ustawienie jego szerokości w oparciu o szerokość strony. – Praetorian