ComboBoxの動作にPopupが影響を受ける原因は?
OS: Windows7、Windows10
.NET Framework: 3.0、4.5
開発環境: VisualStudio 2013、VisualStudio 2015
Popup
の中にComboBox
を入れて表示していたのですが、
想定していたものとは異なる動作をしました。
XAML
<Window
x:Class="SandBox.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="100" Width="100">
<Grid>
<Button Click="OnClick">
<StackPanel>
<TextBlock Text="ボタン"/>
<Popup x:Name="Popup" StaysOpen="False">
<StackPanel>
<TextBlock Text="ポップアップ" Background="White"/>
<ComboBox x:Name="ComboBox">
<ComboBoxItem><TextBlock Text="選択肢1"/></ComboBoxItem>
<ComboBoxItem><TextBlock Text="選択肢2"/></ComboBoxItem>
<ComboBoxItem><TextBlock Text="選択肢3"/></ComboBoxItem>
</ComboBox>
</StackPanel>
</Popup>
</StackPanel>
</Button>
</Grid>
</Window>
C#
private void OnClick(object sender, RoutedEventArgs e)
{
Popup.IsOpen = true;
DispatcherTimer timer = new DispatcherTimer();
timer.Tick += delegate
{
// Popup.StaysOpen = true;
ComboBox.IsDropDownOpen = false;
// Popup.StaysOpen = false;
timer.Stop();
};
timer.Interval = TimeSpan.FromSeconds(3.0);
timer.Start();
}
操作手順は以下の通りです。
- ボタンをクリックします。
- コンボボックスが表示されるので、
コンボボックスをクリックしてドロップダウンリストを表示させます。 - ドロップダウンリストが表示されたままの状態で、
マウスカーソルをウインドウ外へ移動させます。 - タイマーが作動しドロップダウンリストが閉じると、ポップアップも閉じてしまいます。
これはマウスカーソルがウインドウ内の場合は起こりません。
実はコメントアウトしているStaysOpen
を直前と直後に変更する方法で回避はできるのですが、
結局ComboBox
とPopup
の何が悪さをしているのかまでは分かりませんでした。
この現象は一体なぜ起きるのでしょうか?