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の値を取ります。
LeftClick | A left mouse button click. |
LeftDoubleClick | A left mouse button double-click. |
MiddleClick | A middle mouse button click. |
MiddleDoubleClick | A middle mouse button double-click. |
None | No action. |
RightClick | A right mouse button click. |
RightDoubleClick | A right mouse button double-click. |
WheelClick | A mouse wheel rotation. |
MouseAction Enum (System.Windows.Input)
Specifiesconstantsthatdefineactionsperformedbythemouse.
注意点ですがLeftClickとはButtonUpではなく、ButtonDownで発火します。
この挙動が嫌な場合は、Button等の中に図形を入れ込むしかなさそうです。
Why?
<Ellipse Opacity=”0″ /> としたらクリックイベントを拾わず、背面のオブジェクトを触ってしまいました。なぜ?
Buttonの場合、Opacity=”0″でもクリックイベントは発生します。
クリックを無効にするにはVisibility=”Hidden”, “Collapse”、もしくはIsHitTestVisible=”False” にするしかないと思っていたのですが、Shapeオブジェクトは特殊なのでしょうか?
だれか教えて!
コメント