2015-05-21 2 views
0

У меня есть datagrid с 4 столбцами. Первые три имеют Width="Auto", тогда как последний имеет Width="*", чтобы заполнить оставшееся пространство. Я не хочу горизонтальную полосу прокрутки, поэтому я отключен.WPX DataGrid обертывание столбцов

Example

Когда программа изменяется на определенную величину ширины, вышеописанная ситуация происходит (только текст последнего столбца получает обернутую). Это не выглядит так плохо, , но когда вы уменьшаете ширину окна еще больше (в котором больше нет места для отображения правого столбца), столбец с «wwwwwwwwwwwwwww ...» по-прежнему не завершается это текст, и все становится белым, так как правый столбец переносит на бесконечность (без пробела). Теперь я ожидал, что эта проблема исчезнет, ​​введя минимальную ширину в самый правый столбец, но вместо этого она приведет к тому, что этот столбец будет отображаться (частично или полностью) за пределами видимой области.

Он работает как ожидалось, когда я делаю третий столбец также как Width="*", но это приводит к значительному повреждению ширины последнего столбца (что мне не нужно). Я попытался установить его на Width="0.1*" (или что-нибудь в этом направлении) с минимальной шириной вместо этого, но я получаю исключение бесконечности из datagrid.

Это сводит меня с ума, и я не вижу выхода отсюда, чтобы достичь того, чего хочу. Короче говоря, все, что я хочу, это текст столбцов, который нужно обернуть доступной ширине файла данных. Последний столбец должен иметь предпочтение ширины.

XAML:

<DataGrid Grid.Row="0" Grid.Column="1" IsEnabled="{Binding HasValidSelectedItem}" ItemsSource="{Binding Items, IsAsync=True}" AutoGenerateColumns="False" 
             SnapsToDevicePixels="True" EnableColumnVirtualization="False" HorizontalAlignment="Stretch" CanUserAddRows="False" CanUserDeleteRows="False" 
             CanUserResizeRows="False" HorizontalScrollBarVisibility="Disabled" > 
    <DataGrid.Resources> 
     <Style TargetType="CheckBox" BasedOn="{StaticResource CenteredCheckBoxStyle}" x:Key="CenteredReadOnlyCheckBoxStyle"> 
      <Setter Property="IsHitTestVisible" Value="False"/> 
      <Setter Property="Focusable" Value="False"/> 
     </Style> 
    </DataGrid.Resources>     
    <DataGrid.Columns> 
     <DataGridCheckBoxColumn Header="Test First" 
      Binding="{Binding First, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="True" ElementStyle="{StaticResource CenteredReadOnlyCheckBoxStyle}" 
      EditingElementStyle="{StaticResource CenteredReadOnlyCheckBoxStyle}" >       
     </DataGridCheckBoxColumn> 
     <DataGridCheckBoxColumn Header="Test Second" 
      Binding="{Binding Second, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="True" ElementStyle="{StaticResource CenteredReadOnlyCheckBoxStyle}" 
      EditingElementStyle="{StaticResource CenteredReadOnlyCheckBoxStyle}" /> 
     <DataGridTextColumn Header="Test Third" Binding="{Binding Third}" 
      EditingElementStyle="{StaticResource DataGridEditingTextBoxStyle}" CellStyle="{StaticResource DataGridToolTipDataGridCellStyle}"> 
      <DataGridTextColumn.ElementStyle> 
       <Style BasedOn="{StaticResource DataGridTextBlockStyle}" TargetType="{x:Type TextBlock}"> 
        <Setter Property="TextWrapping" Value="Wrap"/> 
        <Setter Property="Padding" Value="0,6"/> 
       </Style> 
      </DataGridTextColumn.ElementStyle> 
     </DataGridTextColumn> 
     <DataGridTextColumn Header="Test Fourth" Width="*" IsReadOnly="True" Binding="{Binding Path=Fourth}" 
      EditingElementStyle="{StaticResource DataGridEditingTextBoxStyle}" CellStyle="{StaticResource DataGridToolTipDataGridCellStyle}"> 
      <DataGridTextColumn.ElementStyle> 
       <Style BasedOn="{StaticResource DataGridTextBlockStyle}" TargetType="{x:Type TextBlock}"> 
        <Setter Property="TextWrapping" Value="Wrap"/> 
        <Setter Property="Padding" Value="0,6"/> 
       </Style> 
      </DataGridTextColumn.ElementStyle> 
     </DataGridTextColumn> 

    </DataGrid.Columns> 
</DataGrid> 
+0

Можете ли вы предоставить все ваши сетка – C1rdec

+0

Забыл @Cedric, еще раз проверьте. –

ответ

0

Если вы не хотите, горизонтальная полоса прокрутки, и это звучит, как вы хотите, третий и четвертый столбцы Autosize (и завернуть, если это необходимо), то не используйте Width="Auto". Мне кажется, что вам нужна фиксированная ширина столбца для первых двух (что-то вроде Width="100", затем для третьего и четвертого столбцов используйте что-то вроде Width="40*" и Width="60*" соответственно. (Или установите их в любом соотношении, которое вы хотите) Кроме того, вы может установить MinWidth и/или MaxWidth контролировать расширение столбцов.

чтобы включить обертку, вам просто нужно добавить ElementStyle к DataGridTextColumn.

<DataGrid> 
    <DataGrid.Columns> 
     <DataGridCheckBoxColumn Header="Check1" Binding="{Binding Check1}" Width="100" /> 
     <DataGridCheckBoxColumn Header="Check2" Binding="{Binding Check2}" Width="100" /> 
     <DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="40*" MaxWidth="200"> 
      <DataGridTextColumn.ElementStyle> 
       <Style> 
        <Setter Property="TextBlock.TextWrapping" Value="Wrap"></Setter> 
       </Style> 
      </DataGridTextColumn.ElementStyle> 
     </DataGridTextColumn> 
     <DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="60*" MinWidth="200"> 
      <DataGridTextColumn.ElementStyle> 
       <Style> 
        <Setter Property="TextBlock.TextWrapping" Value="Wrap"></Setter>      
       </Style> 
      </DataGridTextColumn.ElementStyle> 
     </DataGridTextColumn> 
    </DataGrid.Columns> 
</DataGrid> 
+0

Я уже использую wrapping text column (он работает, я его протестировал). Ширина = 20 не идеальна, так как есть заголовки столбцов (которые требуют около 100 пикселей в зависимости от языка). Две ширины с '*' в ней работают, но третий столбец не так важен, и это будет означать, что много пространство теряется. Я очень хочу, чтобы последний столбец имел наибольшую ширину, сохраняя при этом минимальную ширину для всех столбцов. –

+0

@Areius, WIdth = 20 был просто примером, поскольку он просто выглядит так, как будто это флажки. Наверное, мне трудно понять, чего вы пытаетесь достичь. Если третий столбец не так важен, вы можете установить 'MaxWidth' в столбце 3, чтобы он не расширялся до определенной ширины, а' MinWidth' на столбце 4, чтобы он не становился слишком маленьким ... –

+0

В настоящее время я немного работаю как ожидалось, вводя MinWidth 50 на все столбцы в сочетании с MaxWidth на третьем столбце, имея ширину третьей и четвертой колонки на *. Это не идеально (поскольку ширина третьего столбца может быть слишком большой или слишком малой для некоторых языков, но она лучше, чем по умолчанию (т. Е. Переполнение за пределами окна). К сожалению, невозможно установить MaxWidth к SizeByHeader или SizeByCells. –

Смежные вопросы