2012-07-11 16 views
10

Tengo un StackPanel, pero la siguiente línea:TextBlock TextWrapping no envolver dentro de StackPanel

<TextBlock Grid.Row="1" Grid.Column="0" Text="{Binding Notes}" TextWrapping="Wrap" /> 

no es envolver el texto.

<StackPanel Orientation="Vertical"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="auto" /> 
      <ColumnDefinition Width="auto" /> 
      <ColumnDefinition Width="auto" /> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="auto" /> 
      <ColumnDefinition Width="5" /> 
      <ColumnDefinition Width="15" /> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 

     <DockPanel Grid.Row="0" Grid.Column="0"> 
      <TextBlock FontWeight="Bold" Padding="0,0,5,0" Text="{Binding Path=Id, StringFormat='#\{0\}'}" /> 
      <TextBlock FontWeight="Bold" Padding="0,0,5,0" Text="{Binding Path=Name}" /> 
     </DockPanel> 
     <TextBlock Grid.Row="0" Grid.Column="4" FontWeight="Bold" Text="{Binding Path=Time, StringFormat={}{0:HH:mm}}" /> 
     <Image 
      Grid.Row="0" 
      Grid.Column="6" 
      HorizontalAlignment="Center" 
      VerticalAlignment="Center" 
      Source="{Binding Path=Image, Mode=OneWay, Converter={StaticResource ImageConverter}}" /> 

     <TextBlock Grid.Row="1" Grid.Column="0" Text="{Binding Notes}" TextWrapping="Wrap" /> 

     <Image 
      Grid.Row="1" 
      Grid.Column="4" 
      HorizontalAlignment="Center" 
      VerticalAlignment="Top" 
      Source="{Binding Path=Picture, Mode=OneWay, Converter={StaticResource PictureConverter}}" /> 
    </Grid> 
</StackPanel> 

El StackPanel Orientación se establece en 'vertical' pero el TextBlock no está heredando él.

¿Dónde me estoy equivocando?

Respuesta

13

Su problema es utilizar el StackPanel que les permite a sus hijos completar todo el espacio disponible; el StackPanel se estira de acuerdo con el tamaño de su contenido. Intente eliminar el StackPanel y solo guarde el Grid - de esta manera limitará el tamaño de sus hijos al espacio disponible utilizado por el Grid.

Si eso no es suficiente en el diseño que ha creado, intente establecer un MaxWidth en el TextBox que necesita envolverse.

Ahora el origen de su problema fue también el hecho de que su TextBox se insertó en la primera columna del Grid que tenía un tamaño infinito (ancho = "Auto"). Por lo tanto, establecer el Grid.Column = "7" en el TextBox hizo el truco que quería (envoltura de texto). Aquí está el código revisado:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="5" /> 
     <ColumnDefinition Width="15" /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition /> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 

    <DockPanel Grid.Row="0" Grid.Column="0"> 
     <TextBlock FontWeight="Bold" Padding="0,0,5,0" Text="{Binding Path=Id, StringFormat='#\{0\}'}" /> 
     <TextBlock FontWeight="Bold" Padding="0,0,5,0" Text="{Binding Path=Name}" /> 
    </DockPanel> 
    <TextBlock Grid.Row="0" Grid.Column="4" FontWeight="Bold" Text="{Binding Path=Time, StringFormat={}{0:HH:mm}}" /> 
    <Image 
     Grid.Row="0" 
     Grid.Column="6" 
     HorizontalAlignment="Center" 
     VerticalAlignment="Center" 
     Source="{Binding Path=Image, Mode=OneWay, Converter={StaticResource ImageConverter}}" /> 

    <TextBlock Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="7" Text="{Binding Notes}" TextWrapping="Wrap" /> 

    <Image 
     Grid.Row="1" 
     Grid.Column="4" 
     HorizontalAlignment="Center" 
     VerticalAlignment="Top" 
     Source="{Binding Path=Picture, Mode=OneWay, Converter={StaticResource PictureConverter}}" /> 
</Grid> 
+2

Gracias Adrian, y gracias por la clara explicación. –

Cuestiones relacionadas