Как узнать, когда ItemsControl переполнил свой ScrollViewer?

Как заменить шаблон с помощью триггера, когда элементы в ItemsControl переполняют его контейнер?

В моей текущей реализации я хотел бы показать более краткую форму шаблона, основанную на том, является ли текущее состояние ItemsControl таким, что содержимое вызывает появление полос прокрутки ScrollViwer, если для видимости полосы прокрутки установлено значение Auto. Поэтому меня интересует любое свойство либо в ScrollViewer, либо в ItemsControl, которое может дать мне подсказку о том, переполняет ли оно ScrollViewer. Если мне нужно использовать какой-то пользовательский ValueConverter, чтобы сделать разумное логическое значение для привязки, я думаю, это тоже будет хорошо.


person jpierson    schedule 06.10.2009    source источник
comment
Имеет ли смысл как-то сравнить свойство ActualWidth ScrollViewer и ItemsControl? Сначала я пойду в тот переулок, чтобы посмотреть, смогу ли я заставить его работать.   -  person jpierson    schedule 07.10.2009
comment
Возможно, использование ExtentWidth или ViewportWidth или их сравнение могут привести меня к правильному решению. Экспериментирую прямо сейчас.   -  person jpierson    schedule 07.10.2009


Ответы (1)


Хорошо, так что я закончил тем, что понял это сам.

В моем случае я использую логическую прокрутку, а не физическую прокрутку, и, поскольку у меня горизонтальная компоновка, все, что мне нужно было сделать, это запустить ScrollViewer.ScrollableWidth. Секрет того, как это работает в моем случае, заключался в том, чтобы убедиться, что я установил для ScrollViewer.HorizontalScrollBarVisibility значение Hidden, а не Disabled. Это позволит прокручивать содержимое и сделает так, чтобы свойство scrollableWidth действительно имело значимое значение.

ПРИМЕЧАНИЕ. Любопытно, что установка HorizontalScrollBarVisibility на Hidden, похоже, визуально сворачивает полосу прокрутки, поэтому я не совсем уверен, в чем разница между Collapse и Hidden в этом случае.

person jpierson    schedule 07.10.2009
comment
Итак, я обнаружил проблему с этим подходом. Присмотревшись немного ближе, изменение содержимого ItemsControl с помощью изменения в ItemTemplate при изменении свойства ScrollViewer's ScrollableWidth приведет к тому, что ScrollableWidth снова изменится, чтобы приспособиться к изменению шаблона и, следовательно, запустить бесконечную циклическую зависимость привязки. Если для этого есть обходной путь, то мое решение все еще будет действительным, в противном случае, я думаю, я все еще ищу альтернативное решение. - person jpierson; 07.10.2009