2012-07-11 29 views
10

Tôi có một StackPanel, nhưng dòng sau:TextBlock TextWrapping không gói bên trong StackPanel

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

không Bao bì các văn bản.

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

Các Định hướng StackPanel được thiết lập để 'dọc' nhưng TextBlock không được kế thừa nó.

Tôi sẽ làm gì sai?

Trả lời

13

Sự cố của bạn đang sử dụng StackPanel cho phép trẻ em điền vào tất cả không gian có sẵn - StackPanel trải dài phù hợp với kích thước nội dung của nó. Hãy thử xóa StackPanel và chỉ giữ lại Grid - bằng cách này bạn sẽ giới hạn kích thước của con của nó thành không gian có sẵn được sử dụng bởi Lưới.

Nếu điều đó không đủ trong bố cục bạn đã tạo, hãy thử đặt một MaxWidth trên TextBox cần gói.

Bây giờ nguồn gốc của sự cố của bạn cũng là một thực tế rằng TextBox của bạn đã được chèn vào Cột đầu tiên của Grid có kích thước vô hạn (Rộng = "Tự động"). Do đó, việc đặt Grid.Column = "7" thành TextBox đã thực hiện mẹo bạn muốn (gói văn bản). Đây là mã được sửa đổi:

<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

Cảm ơn Adrian, và cảm ơn lời giải thích rõ ràng. –

Các vấn đề liên quan