マウスを使用して丸くドラッグできる角の丸い長方形を含む WPF キャンバスを作成しようとしています。ただし、キャンバス上でマウスをキャプチャしようとすると、移動イベントが発生しなくなります。
これは「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 が呼び出されます (アプリを閉じたり、アプリ内の他のものをクリックすることができなくなったため、動作します!)、MouseMove はもう呼び出されません。MouseMove イベントはどこに送信されますか?
別のアプリケーションに alt-tab キーを押してから、突然戻ると、MouseMove が呼び出され、Foo がマウスと共に移動します。