Bonjour,
Je cherche à gérer le wrapping de contrôles qui se trouvent dans le "repeater" de WPF, l'ItemsControl.
J'ai réussi à modifier le comportement original du ItemsControl pour utiliser un WrapPanel à l'intérieur:
L'arbre WPF généré derrière doit donc ressembler à quelque chose comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <ItemsControl Grid.Row="2" ItemsSource="{Binding Stops}" FontSize="4"> <ItemsControl.ItemTemplate> <DataTemplate> <WrapPanel> <TextBlock Text="{Binding NameFrench}" /> <TextBlock Text=" / " /> <TextBlock Text="{Binding NameDutch}" /> <TextBlock FontWeight="Bold" Text="{Binding ArrivalTime, Converter={StaticResource dateTimeConverter}}"/> <TextBlock Text=" - " /> </WrapPanel> </DataTemplate> </ItemsControl.ItemTemplate> <ItemsControl.Template> <ControlTemplate> <WrapPanel Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" FlowDirection="LeftToRight" IsItemsHost="True" /> </ControlTemplate> </ItemsControl.Template> </ItemsControl>
- WrapPanel
- WrapPanel
- TextBlock
- ...
- WrapPanel
- TextBlock
- ...
Dans ce cas, le wrapping est fait sur chaque item. (Si un item est trop grand, il passe à la ligne)
J'aurais besoin d'obtenir ceci à la place:
- WrapPanel
- TextBlock
- ...
- TextBlock
- ...
En fait j'ai besoin que le wrapping se fasse sur chaque textblock et non pas sur chaque item (regroupement de TextBlock).
Je veux donc que le wrapping puisse se faire entre deux textblocks d'un même item. En gros, qu'il puisse être coupé en deux s'il est trop long et qu'un morceau passe à la ligne.
Evidemment, il n'y a pas moyen de définir l'ItemTemplate sans container ... Grid, WrapPanel, StackPanel ou n'importe quoi d'autre. Je me retrouve donc toujours dans le premier cas de figure (WrapPanel dans WrapPanel).
Je ne suis pas sur d'être sur la bonne voie.
Y a t'il moyen de s'en sortir d'une facon ou d'une autre ?
Merci d'avance.
Partager