Авторазмер элементов на основе положения макета
По сути, я хочу выложить визуальные элементы, которые могут изменять свое содержимое в зависимости от того, где они будут размещены. Я хочу сделать это в WPF, но вы можете предложить общий алгоритм, не зная много о WPF.
Пример: рассмотрим WrapPanel
который содержит только Label
с текстом. Когда Label
заложен WrapPanel
в начале новой строки все начальные пробелы будут удалены из текста. Это действительно сделает Label
короче.
Единственная мысль, которая знает, где именно будет такой Label
заложен WrappPanel
это делает макетирование. Таким образом, один из подходов для этого заключается в кодировании пользовательских Panel
что переопределяет MeasureOverride
а также ArrangeOverride
и изменить Label
внутри MeasureOverride
перед звонком Measure
на Label
, Мне это не нравится, потому что:
- Это безобразный хак (
Panel
и особенноMeasureOverride
а такжеArrangeOveride
следует только положение детей не менять их). - Я не уверен, но я думаю, что если я изменил
Label
внутриMeasureOverride
Label
приведет к обновлению макета в ответ, что приведет к другому (рекурсивному) вызовуMeasureOverride
(=> бесконечный цикл).
Поэтому, пожалуйста, предложите правильный дизайн для этого сценария. Как это должно сделать это? Мне приходит в голову следующее:
- Есть регулярный
WrapPanel
, - Каждый раз его
Width
или жеHeight
изменен или некоторые дочерние элементы (его дочерние элементы могут быть перемещены) обновите дочерние элементы доMeasureOverride
а такжеArrangeOverride
называется. - В процессе обновления детей (2.) нет вызова
Measure
или жеArrange
изWrapPanel
может быть сделано. Вопрос: Как мне временно запретить все такие звонки?
Прежде чем предложить мне использовать RichTextBox
или же TextBlock
иметь дело с пробелами в начале строк, обратите внимание, что Label
s и пробелы являются лишь примером - это немного сложнее. Но если я знаю, как решить Label
s и пробелы ', я тоже буду знать, как решить реальную проблему.
Если вы хотите узнать, зачем мне это делать, взгляните на мой вопрос: создайте редактор гитарных аккордов в WPF и ответ HB.