기본적으로 내 프로그램에서 간단하게 문제가 발생 했으므로 제대로 진행하고 싶습니다. 마우스 단추를 클릭 할 때 MouseEventHandler
을 추가 한 다음 이벤트 핸들러가 제거 될 때까지 마우스를 따라 원을 이동해야합니다. 나는 아주 기본에 코드를 단순화 :마우스가 객체에 포커스를 잃으면 MouseMove 이벤트가 작동하지 않는 이유는 무엇입니까?
XAML :
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid Name="grid1" Background="White" MouseLeftButtonUp="grid_MouseUp">
<Ellipse Height="50" HorizontalAlignment="Left" Margin="12,12,0,0" Name="ellipse1" Stroke="{x:Null}" VerticalAlignment="Top" Width="50" Fill="Black" MouseLeftButtonDown="ellipse1_MouseDown" />
</Grid>
</Window>
C 번호 :
이public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private static Point _oldPoint = new Point(), _newPoint = new Point();
private void ellipse1_MouseDown(object sender, MouseButtonEventArgs e)
{
_oldPoint = e.GetPosition(grid1);
grid1.MouseMove += new MouseEventHandler(grid_MouseMove);
}
private void grid_MouseUp(object sender, MouseButtonEventArgs e)
{
grid1.MouseMove -= new MouseEventHandler(grid_MouseMove);
}
private void grid_MouseMove(object sender, MouseEventArgs e)
{
_newPoint = e.GetPosition(grid1);
ellipse1.Margin = new Thickness(ellipse1.Margin.Left - _oldPoint.X + _newPoint.X, ellipse1.Margin.Top - _oldPoint.Y + _newPoint.Y, 0, 0);
_oldPoint = _newPoint;
}
}
이제 일반적으로이 코드는 잘 작동하고 나는 그것을 확인하지 않는 한 아주 깔끔한 생각 마우스가 실제로 버튼을 누를 때까지의 마우스의 움직임 그러나 내 질문은 다음과 같습니다.
마우스 포인터가 원의 초점을 잃으면 (마우스를 너무 빨리 움직여서) MouseMove
이벤트를 원이 아닌 표에 추가해야했습니다. 더 이상 MouseMove 이벤트를 트리거하십시오. 그런데 정확히 그 일이 일어나는 이유는 무엇입니까? 이벤트의 시작 부분에서 마우스가 원 위에 명확히 위치 했으므로 움직였습니다. 예, 서클에서 멀어졌지만 여전히 이벤트를 실행해서는 안됩니까?
[Mouse.Capture Method] (http://msdn.microsoft.com/en-us/library/ms591452.aspx)를 사용해 보셨습니까? – LPL
@LPL Mouse.Capture 메서드는 어떻게 사용합니까? 나는 msdn 기사를 보았지만 직접적인 사용은별로 도움이되지 못했습니다. – phil13131