我创建了一个非常简单的测试控件,在画布上有一个Rectangle
(在其他容器中,但无关紧要)。 Rectangle
具有用于鼠标按下,鼠标移动和鼠标按下的事件处理程序。如果我在Rectangle的MouseLeftButtonDown事件中捕获鼠标,则不会收到相应的MouseLeftButtonUp事件。
一些代码:
private void rect1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (_captured = CaptureMouse())
{
_offset = new Point(Canvas.GetLeft(rect1), Canvas.GetTop(rect1));
_origin = e.GetPosition(RootCanvas);
e.Handled = true;
}
}
private void rect1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (_captured)
{
ReleaseMouseCapture();
_captured = false;
e.Handled = true;
}
}
我也为容器元素附加了事件处理程序,只是为了确保其中一个没有以某种方式获得鼠标启动事件,但没有一个是。我还没有学到Silverlight中对此的期望吗?
答案 0 :(得分:2)
我认为您对实际捕获鼠标事件的内容感到困惑。
当你这样做时考虑: -
if (_captured = CaptureMouse())
实际被调用的CaptureMouse
是什么对象?
答案:代码为代码隐藏的用户控件。如果你想要矩形捕获鼠标你会做: -
if (_captured = rect1.CaptureMouse())
答案 1 :(得分:1)
CaptureMouse();从mouseDown事件开始,然后尝试。