WPF DataGrid行标题可见性错误

时间:2011-12-30 20:14:46

标签: c# .net wpf xaml wpfdatagrid

我使用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 个答案:

答案 0 :(得分:16)

尝试设置RowHeaderWidth = 0而不是HeaderVisibility

答案 1 :(得分: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();
    }
}