2011-12-30 5 views
9

Я использую DataGrid для отображения нескольких полей, одно из которых представляет собой многострочное описание. Сетка отображает данные просто отлично, пока я не попытаюсь скрыть строки заголовка, установив HeadersVisibility="Column". Строки заголовка исчезают, но затем, когда я прокручиваю заголовок строки, появляется снова для некоторых случайных строк.WPF DataGrid Ошибка видимости заголовка строки заголовка

Я сузил его до столбца, который отображает многострочное описание. Пока я покидаю этот столбец, у меня нет этой проблемы. Я пробовал разделять строки как "\r\n", так и "\n", но не работает. Поддерживает ли DataGrid многострочные текстовые поля?

Ниже приведено изображение, показывающее, что происходит, и XAML, который я использовал для создания сетки.

DataGrid Row Header Error Image

<DataGrid DataContext="{StaticResource personRepository}" 
      ItemsSource="{Binding PersonList, Mode=OneWay}" 
      AutoGenerateColumns="False" 
      HeadersVisibility="Column" 
      CanUserSortColumns="False" 
      SelectionMode="Extended" 
      IsReadOnly="True"> 

    <DataGrid.Columns> 
     <DataGridTextColumn Header="Id" Width="80" Binding="{Binding Id, Mode=OneWay}" /> 
     <DataGridTextColumn Header="First Name" Width="150" Binding="{Binding FirstName, Mode=OneWay}" /> 
     <DataGridTextColumn Header="Last Name" Width="150" Binding="{Binding LastName, Mode=OneWay}" /> 
     <DataGridTextColumn Header="Description" Width="*" Binding="{Binding Description, Mode=OneWay}" /> 
    </DataGrid.Columns> 
</DataGrid> 
+0

Что вы имеете в виду под «скрыть строки заголовка «? HeadersVisibility = «Столбец» по умолчанию. Какова была настройка раньше (что сработало)? Если это только чтение, я бы использовал ListView GridView. Больше XAML, но я думаю, что вам лучше контролировать форматирование. Для содержимого используйте TextBlock и установите Wrap on для описания. – Paparazzi

+0

По умолчанию используется HeadersVisibility = All. Строка заголовка маленькая, но она есть. Я начал с GridView, но ширина столбцов не будет принимать нотацию «*», чтобы последний столбец заполнил оставшееся пространство. – dewald

+0

Вы должны использовать конвертер для * с GridView. Я отправлю его в качестве ответа, если хотите. – Paparazzi

ответ

16

Попробуйте установить RowHeaderWidth = 0 вместо HeaderVisibility

1

В этом случае lvCurDocFields является родителем ListView. Нижняя сторона здесь - вам нужно установить жесткую ширину для других столбцов, а затем общее количество этих других столбцов - это ConverterParameter. Если у вас есть вертикальная полоса прокрутки затем оставить около 20. GridView вроде боли, но мне нравится, как представление только для чтения является гораздо более эффективным, чем DataGrid

<GridViewColumn Width="{Binding ElementName=lvCurDocFields, Path=ActualWidth, Converter={StaticResource widthConverter}, ConverterParameter=100}"> 

[ValueConversion(typeof(double), typeof(double))] 
public class WidthConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     // value is the total width available 
     double otherWidth; 
     try 
     { 
      otherWidth = System.Convert.ToDouble(parameter); 
     } 
     catch 
     { 
      otherWidth = 100; 
     } 
     if (otherWidth < 0) otherWidth = 0; 

     double width = (double)value - otherWidth; 
     if (width < 0) width = 0; 
     return width; // columnsCount; 

    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
Смежные вопросы