Depuis quelques jours, j'ai essayé d'envelopper ma tête autour de la mise en page suivante de TextBlocks:WPF - Complexe TextBlock mise en page
-------------------- -----------
| 1 | | |
-------------------- | 3 |
| 2 | | |
----------------- -----------
Toutes les TextBlocks ont une largeur dynamique. Ils ont une hauteur fixe et sont dans un conteneur de taille fixe. Ils doivent répondre aux exigences suivantes:
- 2 a la priorité maximale - il doit toujours être à pleine longueur.
- 3 peut remplir l'espace restant à gauche après le calibrage 2.
Quand ignorant TextBlock 1, ces deux exigences pourrait être remplie en mettant les deux autres TextBlocks dans une grille, avec des colonnes réglées sur « auto » et " *" respectivement.
Il y a une troisième condition cependant:
- 1 prend tout l'espace qu'il peut, mais sans restreindre 3.
Exemples:
contenu à long dans le bloc 3 (bloc 2 le contenu est entier, le contenu du bloc 3 est découpé):
----------------- -------------
| 1 | | |
----------------- | 3 |
| 2 | | |
----------------- -------------
Contenu court dans le bloc 3 (les blocs 2 et 3 ont une longueur totale; le bloc 1 remplit l'espace restant):
--------------------- ---------
| 1 | | |
--------------------- | 3 |
| 2 | | |
----------------- ---------
Existe-t-il un moyen d'obtenir cette disposition dans WPF? Comment?
Merci pour la réponse. Cependant, cela ne fonctionne pas comme prévu pour le second exemple. J'ai modifié votre code pour le faire fonctionner, la dernière branche 'else' doit être changée en ceci:' InternalChildren [2] .Arrange (nouveau Rect (arrangementSize.Width - tailleLabel2.Width, 0, tailleLabel2.Width, tailleLabel2. La taille)); InternalChildren [0] .Arrange (nouveau Rect (0, 0, arrangeSize.Width - tailleLabel2.Width, tailleLabel0.Height)); '. Si vous modifiez votre réponse, je l'accepterai. – Mastah
Je suis heureux que vous ayez eu l'idée et soyez capable d'adapter la logique à vos besoins. J'ai mis à jour ma réponse. – gomi42