2012-06-01 1 views
1

Я хочу создать сетку данных с одним столбцом, представляющим довольно длинные текстовые значения. Так что моя функциональность цели состоит в том: ширинеВысота сетки данных слишком высока при использовании word-wrap в столбце текстового блока

  • Колонка быть столь же широко, как остальные пространства окна (окно может быть повторно размером)
  • Word-обертывание текста по мере необходимости
  • Предельной высоты сетки данных оставшейся высоту окно и, при необходимости, установите вертикальную прокрутку

Следующий код соответствует первым двум пунктам и обеспечивает функционирующую вертикальную полосу прокрутки, но высота сетки данных слишком необычна для контента, который он показывает. Удаление текстового блока из текстового блока исправляет это ... но мне нужно слово-обертка.

Как я могу сохранить функциональность word-wrap без повышения высоты сетки данных?

<ScrollViewer VerticalScrollBarVisibility="Auto"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     </Grid.RowDefinitions> 
     <!-- other controls in different parts of the data grid --> 
     <DataGrid Grid.Row="1" Grid.Column="1" HorizontalAlignment="Left" 
     Margin="0,6,6,6" Name="dgMessages" VerticalAlignment="Top" 
     Background="DarkGray" HeadersVisibility="None" 
     AlternatingRowBackground="Gainsboro" CanUserResizeColumns="False" 
     CanUserResizeRows="False" CanUserSortColumns="False" 
     AutoGenerateColumns="false" BorderBrush="Black" HorizontalGridLinesBrush="{x:Null}" 
     ItemsSource="{Binding Messages, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" > 
      <DataGrid.Columns> 
       <dg:DataGridTemplateColumn Width="*"> 
        <dg:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Value}" 
           TextWrapping="WrapWithOverflow" 
           Padding="5,5,5,5" /> 
         </DataTemplate> 
        </dg:DataGridTemplateColumn.CellTemplate> 
       </dg:DataGridTemplateColumn> 
      </DataGrid.Columns> 
     </DataGrid> 
    </Grid> 
</ScrollViewer> 

«дг» пространство имен «http://schemas.microsoft.com/winfx/2006/xaml/presentation»

+0

ли источник просмотра в браузере и вставить код здесь, так что мы можем посмотреть на сгенерированный HTML. –

+0

Я не думаю, что могу это сделать, потому что это рабочий проект WPF, поэтому браузер не используется. Во всяком случае, я все равно посмотрел вокруг и не нашел никакого сгенерированного HTML. Я неправильно понял вас? – Jesslyn

ответ

0

Удаление ScrollViewer и установки высоты строки, содержащей данные сетка до "*" зафиксировала это. Обтекание текста в столбце сетки данных обрабатывается обычно, когда сетка данных не находится в строке, размер которой автоматически зависит от содержимого.

Вот код конца:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 
    <!-- other controls in different parts of the data grid --> 
    <DataGrid Grid.Row="1" Grid.Column="1" HorizontalAlignment="Left" 
     Margin="0,6,6,6" Name="dgMessages" VerticalAlignment="Top" 
     Background="DarkGray" HeadersVisibility="None" 
     AlternatingRowBackground="Gainsboro" CanUserResizeColumns="False" 
     CanUserResizeRows="False" CanUserSortColumns="False" 
     AutoGenerateColumns="false" BorderBrush="Black" HorizontalGridLinesBrush="{x:Null}" 
     ItemsSource="{Binding Messages, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" > 
     <DataGrid.Columns> 
     <dg:DataGridTemplateColumn Width="*"> 
      <dg:DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Value}" TextWrapping="WrapWithOverflow" Padding="5,5,5,5" /> 
       </DataTemplate> 
      </dg:DataGridTemplateColumn.CellTemplate> 
     </dg:DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid>