Размещение внешнего приложения в WPF TabControl

Мне удалось создать пример проекта, который использует HwndHost для размещения Блокнота (а не того, что будет внедрять мой реальный проект) внутри элемента управления вкладки C# WPF. За это большое спасибо тем, кто ответил на внешнее приложение Hosting в окне WPF (кстати, DwayneNeed не нужен)

Этот пример прекрасно работает, пока вы не нажмете на размещенный экземпляр Блокнота, а затем попытаетесь изменить вкладки. Если у вас нет контента на новой странице, на которую вы переходите, вы должны сначала нажать на ваш текущий селектор страниц, прежде чем он примет щелчок на другой вкладке. Если у вас есть контент на другой странице (что-нибудь... просто кнопка), то вы вынуждены дважды щелкнуть по селектору новой вкладки, чтобы убрать его.

То, что я пробовал, не сработало:

  • Использование AttachThreadInput() для объединения потоков ввода обоих окон приложения.
  • призвание this.InvalidateVisual(); на событие нажатия мыши Tab Control.

Что делает трюк:

  • Программно изменяя TabControl.SelectedIndex значение того, что я хочу, когда кнопка нажата.

Чтобы обойти эту проблему, я думаю, что мне просто придется использовать кнопки вместо селекторов вкладок (делая их невидимыми) и просто изменять страницы программно. Это не имеет большого значения, но я просто хотел бы знать, сталкивался ли кто-нибудь еще с этой проблемой, и, возможно, есть объяснение этому!

PS Я вроде новичок в WPF и C#.

1 ответ

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

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