C#
WPF
Xaml

WPF:CanvasなどのコントロールはBackground/Fillを明示的に指定しないとマウスイベントが発生しない

Canvasとマウスクリック

WPFでCanvasコントロールにおいて, コンテキストメニューなどのマウスクリックイベントが無効になっていた原因と解決法の備忘録

問題のコード

マウスの右クリックイベントやContextMenuを設定してるのに, 右クリックしても反応ナシ...

<Canvas Name="MainCanvas" Width="400" Height="300" MouseRightButtonDown="MainCanvas_MouseRightButtonDown">
    <Canvas.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Hello!"></MenuItem>
        </ContextMenu>
    </Canvas.ContextMenu>
</Canvas>

解決法と原因

どうやらBackgroundがnullだと「空洞扱い」になってしまい, マウスダウンイベントが取れていなかったようです.

↓のコードなら上手くいきました :)

<Canvas Name="MainCanvas" Width="400" Height="300" MouseRightButtonDown="MainCanvas_MouseRightButtonDown" Background="Transparent">
    <Canvas.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Hello!"></MenuItem>
        </ContextMenu>
    </Canvas.ContextMenu>
</Canvas>

「Transparent」や「AliceBlue」など, nullでないBackGroundを設定してあげることで解決しました.

参考

Why doesn't this WPF code generate a context menu?

余談:

こんなん初見じゃわからんがな orz