Всплывающие окна в WPF сразу теряют фокус и закрываются

Я бьюсь головой о проблеме с всплывающим окном WPF и надеюсь, что кто-нибудь мне поможет:) Схема выглядит следующим образом:

Наше приложение хранит список объектов UIObject - они представляют элементы, которые отображаются в окне просмотра 3d (через член UIRenderObject, который представляет собой просто квадратную сетку с растровым изображением на нем) и в виде дерева (через член TreeViewItem).

В любом случае, когда объект обнаруживает щелчок правой кнопкой мыши, он пытается открыть всплывающее окно. Код для этого настолько прост, насколько вы можете получить:

ContextMenu contextMenu = new ContextMenu();

//add content

contextMenu.IsOpen = true;

Когда я щелкаю в окне просмотра, все работает как положено - всплывающее окно открывается и остается открытым, пока оно не потеряет фокус или пока не будет сделан выбор. В древовидном представлении всплывающее окно теряет фокус и немедленно закрывается.

Я попытался явно установить фокус, явно установить PlacementTarget, пометить событие мыши как обработанное до и после вызова, чтобы открыть всплывающее окно, утвердить пометку всплывающего окна как "StaysOpen" и дюжину других вещей, и все же оно закрывается немедленно,

Любая помощь будет высоко ценится. Заранее спасибо!

2 ответа

Решение

Вздох, как оказалось, я слишком усложнил вопрос. Вместо того чтобы управлять самим контекстным меню, нужно было просто назначить его собственному ContextMenu TreeViewItem и позволить системе справиться с ним. Это научит меня. Спасибо всем за вклад:)

Это поведение по умолчанию для ContextMenu. В качестве альтернативы вы можете использовать Popup Class вместо ContextMenu. Затем вы можете продлить его как ваше требование.

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