2011-12-30 17 views
9

Estoy usando un DataGrid para mostrar varios campos, uno de los cuales es una descripción de varias líneas. La cuadrícula muestra los datos muy bien hasta que intento ocultar las filas del encabezado configurando HeadersVisibility="Column". Las filas del encabezado desaparecen pero luego, mientras estoy desplazándome, el encabezado de la fila vuelve a aparecer para algunas filas aleatorias.WPF DataGrid Error de visibilidad del encabezado de fila

Lo he reducido a la columna que muestra la descripción de varias líneas. Mientras deje esta columna, entonces no tengo este problema. He intentado separar las líneas por "\r\n" y "\n" pero tampoco funcionan. ¿Admite DataGrid los campos de texto de varias líneas?

A continuación se muestra una imagen para mostrar lo que está sucediendo y el XAML que utilicé para crear la cuadrícula.

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

¿Qué quiere decir por "ocultar las filas de cabecera "¿?" HeadersVisibility = "Column" es el valor predeterminado. ¿Cuál fue la configuración anterior (que funcionó)? Si esto es de solo lectura, usaría ListView GridView. Más XAML, pero creo que tienes un mejor control del formato. Para el contenido use TextBlock y configure Wrap on para la descripción. – Paparazzi

+0

El valor predeterminado es HeadersVisibility = All. La fila del encabezado es pequeña, pero está allí. Empecé con GridView pero el ancho de las columnas no aceptaría la notación "*", por lo que la última columna ocuparía el espacio restante. – dewald

+0

Tienes que usar un convertidor para * con GridView. Lo publicaré como una respuesta si quieres. – Paparazzi

Respuesta

16

intente configurar RowHeaderWidth = 0 en lugar de HeaderVisibility

1

En este caso lvCurDocFields es el ListView padres. El lado negativo aquí es que necesita establecer anchuras duras para las otras columnas y luego el total de esas otras columnas es el parámetro Convertidor. Si usted tiene una barra de desplazamiento vertical a continuación, dejar alrededor de 20. GridView es un tipo de dolor, pero me gusta la presentación que la de sólo lectura es mucho más eficiente que la cuadrícula de datos

<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(); 
    } 
} 
Cuestiones relacionadas