Я пытаюсь создать выпадающий элемент управления, состоящий из элемента ToggleButton и Popup с TabControl внутри. Моя проблема заключается в том, что всплывающее окно не закрывается автоматически, если я не щелкнул по нему какой-то элемент управления.Всплывающее окно не теряет фокус и закрывается, пока я не щелкнул элемент управления внутри него
Рассмотрим пример ниже, где всплывающее окно содержит TabControl, который сам содержит элемент управления календарем внутри TabItem.
Ожидается, что всплывающее окно закрывается всякий раз, когда он теряет фокус (то есть, щелкнув окно контейнера), но для того, чтобы всплывающее окно запускало событие LostFocus и, таким образом, закрылось, я должен нажать одну из кнопок со стрелками на Календарный контроль.
<UserControl
x:Class="DropDownExample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
<Grid>
<ToggleButton x:Name="ToggleButton"
ClickMode="Press">Example</ToggleButton>
<Popup x:Name="Popup"
Placement="Bottom"
AllowsTransparency="True"
StaysOpen="False"
PopupAnimation="Slide"
FocusManager.IsFocusScope="false">
<TabControl x:Name="TabControl"
MinHeight="200">
<TabItem>
<Calendar />
</TabItem>
</TabControl>
</Popup>
</Grid>
</UserControl>
Открытие/закрытие всплывающего окна контролируется в зарегистрированном/непроверенных событий ToggleButton.
Ну, я поместил элемент управления в окно, и когда я нажимаю строку заголовка окна (и перемещаю окно), всплывающее окно остается открытым. Возможно, я не понял, когда возникла эта проблема, потому что она работает нормально, когда я перехожу к другому приложению. Однако не кажется правильным, что всплывающее окно не закрывается, когда я нажимаю на/внутри содержащего окна, а не если я нажимаю на другой элемент управления внутри окна. Я даже могу сфокусировать смежное текстовое поле и ввести его, пока всплывающее окно остается открытым. Но, если я сначала нажму на одну из стрелок в календаре, все будет работать ... –
Кроме того, заменяя календарь текстовым полем, мне нужно перемещать курсор (и фокус) внутри текстового поля до всплывающего окна. Закрывается по мере необходимости. –
Я обновил свой ответ, но до сих пор не могу восстановить вашу проблему. – feO2x