Другая возможность заключается в том, что проблема связана не с макетом, а с «разрывом» визуального дерева при перемещении контента из одного окна в другое.Похоже, это вызывает массу пересчетов для свойств зависимостей, которые, если ваше визуальное дерево для контента было похоже на мое, превышало 2000 элементов управления, это было бы очень медленно.
Я не мог найти элегантное решение для этого, используяСама библиотека стыковки Actipro, поэтому я подумал, как можно отвести WPF от такого поведения.Решение, которое я придумал, состояло в том, чтобы создать свой контент в виде единого элемента управления WinFormsHost с одним дочерним элементом WinForms UserControl.Затем я сделал так, чтобы в WinForms UserControl его содержимое было содержимым на основе WPF, которое должно отображаться как содержимое окна стыковки.Я полагал, что когда WPF начнет обходить визуальное дерево сверху, чтобы переоценить все свойства зависимостей, когда дерево было «обрезано», оно попадет в элемент управления WinForms и остановится.
Используются окна инструментов закрепления Actiproзаймет около 6 секунд, чтобы просто переключать вкладки или плавать.Теперь они по сути инстинктивны.Вы должны убедиться, что любые обработчики команд находятся не на уровне приложения, а на уровне содержимого WPF, и вам, возможно, придется определить местоположение некоторых файлов стилей, но это работало фантастически.