Размещение внешнего приложения в WPF TabControl
Мне удалось создать пример проекта, который использует HwndHost для размещения Блокнота (а не того, что будет внедрять мой реальный проект) внутри элемента управления вкладки C# WPF. За это большое спасибо тем, кто ответил на внешнее приложение Hosting в окне WPF (кстати, DwayneNeed не нужен)
Этот пример прекрасно работает, пока вы не нажмете на размещенный экземпляр Блокнота, а затем попытаетесь изменить вкладки. Если у вас нет контента на новой странице, на которую вы переходите, вы должны сначала нажать на ваш текущий селектор страниц, прежде чем он примет щелчок на другой вкладке. Если у вас есть контент на другой странице (что-нибудь... просто кнопка), то вы вынуждены дважды щелкнуть по селектору новой вкладки, чтобы убрать его.
То, что я пробовал, не сработало:
- Использование AttachThreadInput() для объединения потоков ввода обоих окон приложения.
- призвание
this.InvalidateVisual();
на событие нажатия мыши Tab Control.
Что делает трюк:
- Программно изменяя
TabControl.SelectedIndex
значение того, что я хочу, когда кнопка нажата.
Чтобы обойти эту проблему, я думаю, что мне просто придется использовать кнопки вместо селекторов вкладок (делая их невидимыми) и просто изменять страницы программно. Это не имеет большого значения, но я просто хотел бы знать, сталкивался ли кто-нибудь еще с этой проблемой, и, возможно, есть объяснение этому!
PS Я вроде новичок в WPF и C#.
1 ответ
Ваше размещенное приложение блокнота - это еще одно окно, поэтому, если фокус находится в блокноте - сначала нажмите на селектор вкладок, чтобы активировать окно WPF и сделать его сфокусированным, а затем второй щелчок, чтобы сделать то, что вы хотите сделать.