2016-11-03 5 views
0

Ich habe DataGridControl, die Spalten dynamisch erstellt basierend auf einer Konfiguration aus der DB. Ich brauche in einigen Fällen einen Zeilenumbruch. Der Code dahinter sieht irgendwie wie folgt aus:WPF dynamisch festlegen Textumbruch Eigenschaft

public class MyDataGridControl : DataGrid 
{ 
    ... 
    private void CreateColumns() 
    { 
     foreach (var colDef in GridDefinition.Columns) 
     { 
      ... 
      dataGridColumn = new DataGridTextColumn() { Binding = new Binding(colDef.Name) }; 
      ... 

      //Wrap 
      if(WrapColumn != null && columnDefinition.Name.Equals(WrapColumn)) 
      { 
       dataGridColumn.CellStyle.Setters.Add(new Setter(TextBlock.TextWrappingProperty, TextWrapping.Wrap)); 
      } 

      ... 
     } 
    } 
    ... 
} 

Mein Problem ist, dass TextBlock.TextWrappingProperty Einstellung funktioniert nicht. Der Text wird nicht umbrochen und ich kann nicht herausfinden warum. Das obige Rastersteuerelement hat keinen WPF-Code. Gibt es etwas, das mir fehlt?

+0

Was passiert, statt zu verpacken? "Es funktioniert nicht" klingt sehr spezifisch für Sie, wenn Sie sich die Ergebnisse ansehen, aber ich sehe mir die Ergebnisse nicht an. –

+0

"Funktioniert nicht" bedeutet, dass Text nicht umgebrochen wird, wenn die Breite der Spalte niedriger als die Textgröße ist. Text überläuft den Col. – Smitis

+0

Mit "Überlaufen" meinst du, dass das Ende am Rand der Säule abgeschnitten ist? –

Antwort

0

TextBlock.TextWrapping ist keine angehängte Eigenschaft, Sie können sie also nicht auf DataGridTextColumn anwenden, sondern nur auf TextBlock. Ich konnte Text in einem DataGrid mithilfe einer DataGridTemplateColumn umbrechen. Ich lege einfach eine TextBlock in die CellTemplate und setze TextWrapping drauf.

XAML würde wie folgt aussehen:

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock 
       TextWrapping="Wrap" 
       Text="{Binding Name}" 
       /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

die ich angelegt habe nie programmatisch eine DataTemplate. Sieht aus wie this question may be doing it.

+0

Ja, das sollte funktionieren, aber wie ich oben erwähnt habe ich nicht WPF wie folgt. Ich muss das programmatisch machen. Ich überprüfe den Link, den du geschrieben hast. – Smitis

Verwandte Themen