2011-12-30 15 views
9

Sto utilizzando un DataGrid per visualizzare diversi campi, uno dei quali è una descrizione a più righe. La griglia visualizza i dati bene fino a quando non cerco di nascondere le righe dell'intestazione impostando HeadersVisibility="Column". Le righe di intestazione scompaiono, ma mentre scorrono, l'intestazione della riga riappare per alcune righe casuali.Errore Visibilità Intestazione riga DataGrid WPF

L'ho ristretto alla colonna che visualizza la descrizione a più righe. Finché esco da questa colonna, non ho questo problema. Ho provato a separare le linee da entrambi "\r\n" e "\n" ma nessuno dei due funziona. Il DataGrid supporta campi di testo su più righe?

Di seguito un'immagine per mostrare cosa sta succedendo e lo XAML che ho utilizzato per creare la griglia.

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

Che cosa si intende per "nascondere le righe di intestazione "? HeadersVisibility = "Column" è il valore predefinito. Qual era l'impostazione precedente (che funzionava)? Se questo è letto solo vorrei usare ListView GridView. Più XAML ma penso che tu abbia un controllo migliore della formattazione. Per il contenuto, utilizzare TextBlock e impostare Wrap on per la descrizione. – Paparazzi

+0

L'impostazione predefinita è HeadersVisibility = All. La riga di intestazione è piccola, ma è lì. Ho iniziato con GridView ma le larghezze delle colonne non avrebbero accettato la notazione "*" in modo che l'ultima colonna riempisse lo spazio rimanente. – dewald

+0

Devi usare un convertitore per * con GridView. Lo posterò come risposta, se ti va. – Paparazzi

risposta

16

provare a impostare RowHeaderWidth = 0 invece di HeaderVisibility

1

In questo caso lvCurDocFields è il ListView genitore. Il lato negativo qui è che è necessario impostare larghezze rigide per le altre colonne e quindi il totale di quelle altre colonne è Convertitore Parametro. Se si dispone di una barra di scorrimento verticale per poi lasciare circa 20. GridView è una specie di dolore, ma mi piace la presentazione come per sola lettura è molto più efficiente di 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(); 
    } 
} 
Problemi correlati