Скрыть элемент управления, когда другой элемент перекрывает его - PullRequest
3 голосов
/ 19 сентября 2011

У меня довольно большая проблема с элементами управления Windows Form, размещенными в WPF.Когда, например, пользователь прокручивает окно, размещенный элемент управления переходит в верхнюю часть окна, хотя он должен быть скрыт.

Я знаю, что это известная проблема и поведение по умолчанию размещенных элементов управления, но я думаю, что ее можно решить, если видимость элемента управления каким-либо образом связана с: перекрывают ли его другие элементы управления или нет.Если другие элементы управления перекрываются, он должен стать Свернутым или Скрытым, если нет, он должен быть Видимым.

Я сделал какое-то решение для этого, но я сделал это для события ScrollChanged объекта ScrollViewer, и оно работает только в особых ситуациях.Если кто-то знает, как добиться этого с помощью связывания, чтобы его можно было применить к любому размещенному элементу управления, поделитесь своими идеями.

1 Ответ

1 голос
/ 20 сентября 2011

Для этой же проблемы мы реализовали что-то любопытное ...

Хост форм Windows не зависит от Z-порядка, поэтому средство просмотра прокрутки не сможет частично скрыть / обрезать его для области, видимой под средством просмотра прокрутки.

Итак, у нас было два варианта ...

  1. Использование хоста формы Windows для размещения в нем остальной части пользовательского интерфейса WPF, что означает, что мы отменяем право собственности на пользовательский интерфейс. WindowsFormsHost должен содержать весь пользовательский интерфейс, имеющий средство просмотра с прокруткой на основе WinForms, которое, в свою очередь, будет содержать пользовательский интерфейс WPF.

  2. Реализация смещения прокрутки для вычисленной высоты хоста оконных форм, и когда пользовательские прокрутки добавляют это смещение к позиции наблюдателя прокрутки и скрывают хост форм ветра самостоятельно (Visibility = Hidden и NOT Collapsed ). Таким образом, это дает эффект, что вы не можете частично прокрутить хост winforms, но полностью прокрутить его из средства просмотра прокрутки. И поскольку winformshost равен Hidden (не свернут), он продолжает занимать такую ​​большую высоту внутри невидимой области под средством просмотра прокрутки (тем самым сохраняя свою позицию прокрутки).

Дайте мне знать, если это направит вас в правильном направлении.

...