За последние несколько дней я пытался обернуть вокруг головы следующей компоновки TextBlocks:WPF - комплекс TextBlock макет
-------------------- -----------
| 1 | | |
-------------------- | 3 |
| 2 | | |
----------------- -----------
Все TextBlocks имеет динамическую ширину. Они имеют фиксированную высоту и находятся в контейнере фиксированного размера. Они должны отвечать следующим требованиям:
- 2 имеет максимальный приоритет - он всегда должен быть на полной длине.
- 3 может заполнить оставшееся пространство, оставшееся после калибровки 2.
При игнорировании TextBlock 1, эти два требования могут быть выполнены путем ввода двух других TextBlocks в сетке, с колоннами, установленными на «авто» и " * "соответственно.
Существует третье требование, хотя:
- 1 принимает все пространство может, но без ограничения 3.
Примеров:
Длинного содержания в блоке 3 (блок 2 содержание в полном объеме, содержимое блока 3 обрезается):
----------------- -------------
| 1 | | |
----------------- | 3 |
| 2 | | |
----------------- -------------
Краткое содержание в блоке 3 (оба блока 2 и 3 содержат полную длину; блок 1 заполняет оставшееся пространство):
--------------------- ---------
| 1 | | |
--------------------- | 3 |
| 2 | | |
----------------- ---------
Есть ли способ достичь этого макета в WPF? Как?
Спасибо за ответ. Однако для второго примера это не работает. Я изменил ваш код, чтобы он работал, последний раздел 'else' должен быть изменен на это:' InternalChildren [2] .Arrange (новый Rect (organizSize.Width - sizeLabel2.Width, 0, sizeLabel2.Width, sizeLabel2. Высота)); InternalChildren [0] .Arrange (новый Rect (0, 0, organizSize.Width - sizeLabel2.Width, sizeLabel0.Height)); '. Если вы измените свой ответ, я приму его. – Mastah
Я рад, что у вас есть идея и вы можете адаптировать логику к вашим потребностям. Я обновил свой ответ. – gomi42