2010-09-08 5 views
3

Je ne suis pas sûr pourquoi mon code ne fait pas le TextWrapping correctement. Il n'emballe pas le texte pour la colonne Description (qui est ce que je veux). Il coupe juste et il n'utilise même pas le "..." pour me faire savoir qu'il y a plus de données.WPG DataGrid: Comment définir des colonnes pour TextWrap?

J'ai essayé d'utiliser ce code que j'ai trouvé en ligne pour faire le travail, mais cela n'a pas fonctionné. Idéalement, j'aimerais pouvoir seulement définir TextWrap sur certaines colonnes et pas génériquement sur tous les objets DataGridCell. Oh, et s'il vous plaît notez que j'utilise Microsoft.NET 4 donc c'est le DataGrid offert à travers cela, pas à partir de la boîte à outils WPF.

<DataGrid Name="TestGrid" Grid.Row="2" Grid.ColumnSpan="2" AutoGenerateColumns="False" ItemsSource="{Binding IntTypes}" SelectedValue="{Binding CurrentIntType}"> 
<DataGrid.Resources> 
    <Style TargetType="{x:Type DataGridCell}"> 
    <Setter Property="Template"> 
    <Setter.Value> 
    <ControlTemplate TargetType="{x:Type DataGridCell}"> 
     <Border Name="DataGridCellBorder"> 
     <TextBlock Background="Transparent" TextWrapping="WrapWithOverflow" TextTrimming="CharacterEllipsis" Height="auto" Width="auto"> 
     <ContentPresenter Content="{TemplateBinding Property=ContentControl.Content}" ContentTemplate="{TemplateBinding Property=ContentControl.Content}" /> 
     </TextBlock> 
     </Border> 
    </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
    </Style> 
</DataGrid.Resources> 
<DataGrid.Columns> 
    <DataGridTextColumn Header="ID" Binding="{Binding ID}" IsReadOnly="True" /> 
    <DataGridTextColumn Header="Interested Parties Description" Binding="{Binding Description}" IsReadOnly="False" /> 
</DataGrid.Columns> 
</DataGrid> 

Merci d'avance!

Répondre

11

Cela ne fonctionne pas car la propriété "Text" de votre TextBlock est actuellement définie sur un autre objet au lieu d'une simple chaîne. Lors de l'exécution, votre VisualTree ressemble à:

Cell 
    - TextBlock (w/ TextWrapping and TextTrimming) 
    - ContainerVisual 
     - ContentPresenter 
      - TextBlock (auto-generated by the DataGrid) 

En bref, vous êtes le code est essentiellement fait quelque chose comme ceci:

<TextBlock TextTrimming="CharacterEllipsis" TextWrapping="WrapWithOverflow"> 
    <TextBlock Text="The quick brown fox jumps over the lazy dog"/> 
</TextBlock> 

Pour résoudre ce problème, essayez de mettre à jour votre ControlTemplate comme suit:

<ControlTemplate TargetType="{x:Type DataGridCell}"> 
    <Border Name="DataGridCellBorder"> 
     <ContentControl Content="{TemplateBinding Content}"> 
      <ContentControl.ContentTemplate> 
       <DataTemplate> 
        <TextBlock Background="Transparent" TextWrapping="WrapWithOverflow" TextTrimming="CharacterEllipsis" 
           Height="auto" Width="auto" Text="{Binding Text}"/> 
       </DataTemplate> 
      </ContentControl.ContentTemplate> 
     </ContentControl> 
    </Border> 
</ControlTemplate> 
Questions connexes