Ошибка видимости заголовка строки WPF DataGrid - PullRequest
10 голосов
/ 31 декабря 2011

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

Я сузил его до столбца, который отображает многострочное описание. Пока я оставляю этот столбец выключенным, у меня нет этой проблемы. Я попытался разделить строки как "\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>

Ответы [ 2 ]

18 голосов
/ 31 декабря 2011

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

1 голос
/ 31 декабря 2011

В этом случае 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();
    }
}
...