Авторазмер элементов на основе положения макета

По сути, я хочу выложить визуальные элементы, которые могут изменять свое содержимое в зависимости от того, где они будут размещены. Я хочу сделать это в WPF, но вы можете предложить общий алгоритм, не зная много о WPF.

Пример: рассмотрим WrapPanel который содержит только Label с текстом. Когда Label заложен WrapPanel в начале новой строки все начальные пробелы будут удалены из текста. Это действительно сделает Label короче.

Единственная мысль, которая знает, где именно будет такой Label заложен WrappPanel это делает макетирование. Таким образом, один из подходов для этого заключается в кодировании пользовательских Panel что переопределяет MeasureOverride а также ArrangeOverride и изменить Label внутри MeasureOverride перед звонком Measure на Label, Мне это не нравится, потому что:

  1. Это безобразный хак (Panel и особенно MeasureOverride а также ArrangeOveride следует только положение детей не менять их).
  2. Я не уверен, но я думаю, что если я изменил Label внутри MeasureOverride Label приведет к обновлению макета в ответ, что приведет к другому (рекурсивному) вызову MeasureOverride (=> бесконечный цикл).

Поэтому, пожалуйста, предложите правильный дизайн для этого сценария. Как это должно сделать это? Мне приходит в голову следующее:

  1. Есть регулярный WrapPanel,
  2. Каждый раз его Width или же Height изменен или некоторые дочерние элементы (его дочерние элементы могут быть перемещены) обновите дочерние элементы до MeasureOverride а также ArrangeOverride называется.
  3. В процессе обновления детей (2.) нет вызова Measure или же Arrange из WrapPanel может быть сделано. Вопрос: Как мне временно запретить все такие звонки?

Прежде чем предложить мне использовать RichTextBox или же TextBlock иметь дело с пробелами в начале строк, обратите внимание, что Label s и пробелы являются лишь примером - это немного сложнее. Но если я знаю, как решить Label s и пробелы ', я тоже буду знать, как решить реальную проблему.

Если вы хотите узнать, зачем мне это делать, взгляните на мой вопрос: создайте редактор гитарных аккордов в WPF и ответ HB.

0 ответов

Другие вопросы по тегам