PopupやContextMenuを閉じるときのマウス操作で、タイトルバーを操作したい
OS: Windows7、Windows10
.NET Framework: 3.0、4.5
開発環境: VisualStudio 2013、VisualStudio 2015
WPFで作ったアプリケーションの操作に違和感を覚えることがあり、その原因を調査してみました。
以下が、その違和感を再現できたコードです。
XAML
<Window
x:Class="WpfSandBox.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Height="200"
Width="200">
<Grid>
<Button HorizontalAlignment="Center" VerticalAlignment="Center" Click="OnClick">
<Button.ContextMenu>
<ContextMenu><MenuItem Header="メニュー"/></ContextMenu>
</Button.ContextMenu>
<Grid>
<TextBlock Text="Button"/>
<Popup x:Name="MyPopup" StaysOpen="False">
<StackPanel Background="Yellow"><TextBlock Text="Popup"/></StackPanel>
</Popup>
</Grid>
</Button>
</Grid>
</Window>
C#
private void OnClick(object sender, RoutedEventArgs args)
{
MyPopup.IsOpen = true;
}
操作手順は以下の通りです。
- ボタンをクリックしてポップアップを表示するか、右クリックでメニューを表示します。
- 表示した状態のままマウスの操作で自身のウインドウのタイトルバーからドラッグ、最大化、最小化、閉じるのいずれかしようとします。
- ポップアップやメニューは消えますが、タイトルバーへの操作が受け付けられていません。
- もう一度タイトルバーをマウスで操作した際には問題ありません。
意外と素早く操作を行うときはこの条件に引っかかってしまい、操作がもたついていたようです。
WPF 以外では今のところ確認できないので、何とか回避する方法はないでしょうか。
ソースコードを確認するとWndProcでクリックをキャンセルしてるように見えるのでかなり厳しいですが…