2013-12-13 77 views
1

我想包包含在三個TextBlock s的文字一個StackPanel內沒有對每個TextBlockTextWrapping="Wrap"(有時可能會有更多的那些):文字環繞

<ListBox ItemsSource="{Binding Places}" SelectedItem="{Binding SelectedPlace, Mode=TwoWay}"> 
     <ListBox.ItemContainerStyle> 
      <Style TargetType="ListBoxItem"> 
       <Setter Property="HorizontalAlignment" Value="Stretch"/> 
      </Style> 
     </ListBox.ItemContainerStyle> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel> 
        <TextBlock Text="{Binding Path=Name, Mode=OneWay}" TextWrapping="Wrap" /> 
        <TextBlock Text="{Binding Path=Distance, Mode=OneWay}" TextWrapping="Wrap" /> 
        <TextBlock Text="{Binding Path=Description, Mode=OneWay}" TextWrapping="Wrap" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

所以,如果我動態添加另一個TextBlock它應該自動換行(我不想在我的代碼隱藏文件中執行)

換句話說 - 我想編寫將自動應用的樣式。在CSS這將是類似的東西:

listbox textblock { 
    word-wrap:break-word; 
} 

UPDATE

這包含我的列表框:

<Grid Background="Transparent"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 

     <!--ContentPanel - place additional content here--> 
     <Grid x:Name="ContentPanel" Grid.Row="1" Grid.Column="0" Margin="12,0,12,0"> 
      <views:ListItem Margin="12,6,0,0" /> 
     </Grid> 
    </Grid> 
+0

您是否將文本框動態添加到項目模板?例如。不只是添加一個項目到列表框? – Charleh

+0

在項目的這個階段 - 沒有。 –

+0

我正在動態添加'ListBoxItem's,但每個內部總是有三個'TextBlock's。實際上這並不重要 - 現在我只想定義一種適用於我的ListBox中每個「TextBlock」的樣式 –

回答

1

您是否嘗試過爲TextBlock添加樣式?即

<ListBox.ItemTemplate> 
    <DataTemplate> 
     <StackPanel> 
      <StackPanel.Resources> 
       <Style TargetType="TextBlock"> 
        <Setter Property="TextWrapping" Value="Wrap"/> 
       </Style> 
      </StackPanel.Resources> 
      ... 
     </StackPanel> 
    </DataTemplate> 
</ListBox.ItemTemplate> 
1

除非您指定Width約束爲TextBlock,它將包裝其文字內容。由於StackPanel調整其內容時,它會永遠通過任何Width限制到TextBlock的內線,所以他們將永遠包裹。將TextWrapping屬性設置爲Wrap而不是足以使文本內容自動換行,因此應用具有此屬性集的Style而不是做到了您想要的。