마우스를 사용하여 드래그 할 수있는 둥근 사각형이있는 WPF 캔버스를 만들려고합니다. 그러나 캔버스에서 마우스를 잡으면 움직이는 이벤트가 더 이상 발생하지 않습니다.WPF CaptureMouse() 후에 MouseMove 이벤트를 보내지 않습니다.
이것은 "mycanvas"사용자 정의 컨트롤이며 사각형은 "foo"사용자 정의 컨트롤입니다. 이들에 대한 XAML (마이너스 프리앰블)은 다음
mycanvas.xaml :
<Canvas MouseDown="CanvasMouseDown" MouseMove="CanvasMouseMove" MouseUp="CanvasMouseUp" Background="White">
<my:Foo HorizontalAlignment="Left" Canvas.Left="97" Canvas.Top="30" x:Name="m_foo" VerticalAlignment="Top" Height="87" Width="128" />
</Canvas>
foo.xaml :
<Border BorderThickness="2" BorderBrush="Black" CornerRadius="15" Background="Plum">
<Grid>
<Label Content="Foo" Height="28" HorizontalAlignment="Left" Margin="6,6,0,0" Name="label1" VerticalAlignment="Top" />
</Grid>
</Border>
그리고
다음 핸들러는 다음과 같습니다 mycanvas.xaml.cs :private void CanvasMouseDown(object sender, MouseButtonEventArgs e)
{
if (e.Source is Foo)
{
m_moving = e.Source as Foo;
CaptureMouse();
e.Handled = true;
}
}
private void CanvasMouseMove(object sender, MouseEventArgs e)
{
if (m_moving != null)
{
Canvas.SetLeft(m_moving, e.GetPosition(this).X);
Canvas.SetTop(m_moving, e.GetPosition(this).Y);
}
}
private void CanvasMouseUp(object sender, MouseButtonEventArgs e)
{
ReleaseMouseCapture();
m_moving = null;
}
MouseDown이 발생하여 CaptureMouse가 호출됩니다 (더 이상 clo 할 수 없어 작동 함). 앱을 보거나 그 안에있는 다른 것을 클릭하십시오!)하지만 MouseMove는 더 이상 호출되지 않습니다. - 그래서 MouseMove 이벤트는 이제 어디로 보내 집니까 ???
다른 응용 프로그램으로 이동 한 다음 다시 돌아가서 suddendly MouseMove가 호출되고 Foo가 마우스로 이동합니다.
가 작동하는 것 같다. 감사. (아직도 이해가 안되는 이유지만, 헤이 ..) – MrPurpleStreak