ShapeオブジェクトにCommandをBinding(C# WPF)

C#

RectangleやEllipse等の図形をクリックした時などにもイベントを張りたいですよね。
code behindで書くのは難しくないのですが、MVVMにこだわるならxamlでBindingしたいです。

Buttonの中に図形を入れたりとか、やり方は何種類かあるのですが、しっくり来たのはコレ。

<Ellipse Fill="Honeydew" Stroke="Green" VerticalAlignment="Top" Width="100" Height="100" >
    <Ellipse.InputBindings>
        <MouseBinding Gesture="LeftClick" CommandParameter="start" Command="{Binding Path=StartWork}"/>
    </Ellipse.InputBindings>
</Ellipse>

InputBindingでMouse Gestureに対してCommandをBindingする方法です。

MouseBindingのGestureですが、これはMouseActionの値を取ります。

LeftClickA left mouse button click.
LeftDoubleClickA left mouse button double-click.
MiddleClickA middle mouse button click.
MiddleDoubleClickA middle mouse button double-click.
NoneNo action.
RightClickA right mouse button click.
RightDoubleClickA right mouse button double-click.
WheelClickA mouse wheel rotation.
MouseAction Enum (System.Windows.Input)
Specifies constants that define actions performed by the mouse.

注意点ですがLeftClickとはButtonUpではなく、ButtonDownで発火します。
この挙動が嫌な場合は、Button等の中に図形を入れ込むしかなさそうです。

Why?

<Ellipse Opacity=”0″ /> としたらクリックイベントを拾わず、背面のオブジェクトを触ってしまいました。なぜ?

Buttonの場合、Opacity=”0″でもクリックイベントは発生します。
クリックを無効にするにはVisibility=”Hidden”, “Collapse”、もしくはIsHitTestVisible=”False” にするしかないと思っていたのですが、Shapeオブジェクトは特殊なのでしょうか?
だれか教えて!

コメント