2009-11-29 5 views
4

J'ai quelques text data que je veux afficher dans un Grid, avec trois colonnes, la colonne du milieu étant deux fois plus large que les deux autres, occupant toute la largeur de la grille. Le text est long et doit être emballé. Ce que je ne peux pas obtenir au travail (et d'autres requêtes ici dans le passé, je vois que d'autres ont eu des problèmes similaires) est d'obtenir un retour à la ligne et de dimensionner la grille pour travailler. Ce que j'est:Habillage de texte, grille et taille d'étoile

<Window.Resources> 
    <local:DTData x:Key="dtData" /> 
</Window.Resources> 

<StackPanel DataContext="{StaticResource dtData}"> 
    <ListBox ItemsSource="{Binding}" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
     <Grid> 
      <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="2*"/> 
      <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <Border x:Name="a" Grid.Column="0" Margin="4"/> 
      <TextBlock Margin="4" Grid.Column="0" TextWrapping="Wrap" 
        Text="{Binding A}" Width="{Binding ActualWidth, ElementName=a }" MinWidth="100"/> 
      <Border x:Name="b" Grid.Column="1" Margin="4"/> 
      <TextBlock Margin="4" Grid.Column="1" TextWrapping="Wrap" 
        Text="{Binding B}" Width="{Binding ActualWidth, ElementName=b }" MinWidth="100"/> 
      <Border x:Name="c" Grid.Column="2" Margin="4"/> 
      <TextBlock Margin="4" Grid.Column="2" TextWrapping="Wrap" 
        Text="{Binding C}" Width="{Binding ActualWidth, ElementName=b }" MinWidth="100"/> 
     </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    </ListBox> 
</StackPanel> 

Il utilise l'astuce Border de WPF TextBox and Scroll behavior pour forcer l'habillage du texte au travail, mais est soit la largeur minimale fixée ou mot le plus long de la largeur de la colonne si elle est supérieure.

Est-ce que quelqu'un connaît un moyen de forcer les colonnes à s'adapter à la largeur de la grille?

+0

double possible de [Comment puis-je obtenir WPF colonnes grille définie avec une étoile à couper le contenu?] (http://stackoverflow.com/questions/25567474/how-do-i-get-wpf-grid-columns-defined-with-star-to-clip-content) – Starceaker

Répondre

1

Vous êtes sûr de vouloir emballer le texte? Ou votre objectif est la coupe de texte? Je demande parce que quand je tape le XAML suivant kaxaml, le texte dans la colonne du milieu est parfaitement enveloppé:

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
    <StackPanel> 
    <ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" Width="350"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
     <Grid> 
      <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="2*"/> 
      <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <TextBlock Margin="4" Grid.Column="0" TextWrapping="Wrap" 
        Text="Binding A" MinWidth="100"/> 
      <TextBlock Margin="4" Grid.Column="1" TextWrapping="Wrap" 
        Text=" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco" MinWidth="100"/> 
      <TextBlock Margin="4" Grid.Column="2" TextWrapping="Wrap" 
        Text="Binding C" MinWidth="100"/> 
     </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    <TextBlock Text="" /> 
    <TextBlock Text=""/> 
    <TextBlock Text=""/> 
    </ListBox> 
    </StackPanel> 
    </Grid> 
</Page> 

Si vous voulez couper le texte, vient de mettre TextWrapping="NoWrap" et TextTrimming à TextTrimming="CharacterEllipsis" en cas de besoin.

Il pourrait y avoir aussi que vous n'avez pas fourni toutes les données, de reproduire le problème que vous décrivez ...

+0

Merci, mais cela répond à deux des trois exigences: il s'enroule correctement et les colonnes s'étendent jusqu'à la largeur de la grille; mais les largeurs de colonnes sont variables avec des données réelles - la vôtre s'aligne facilement parce que vous utilisez les mêmes données pour chaque ligne. Ce que je n'ai pas été en mesure de faire est d'obtenir le texte à enrouler, les colonnes pour s'adapter à la largeur de la liste et les largeurs de colonne pour être cohérent pour chaque ligne. – amaca

+0

Pourriez-vous ajouter une photo montrant ce que vous essayez de faire? Je ne peux toujours pas l'obtenir .. – Anvaka