Я пишу небольшую функцию перетаскивания в проекте, над которым я работаю. Я делал этот тип функции несколько раз раньше, и я всегда использую комбинацию и PreviewMouseMove
, чтобы обнаружить начало перетаскивания. Он всегда работал раньше.WPF: PreviewMouseMove не срабатывает при нажатии левой кнопки мыши?
В этом проекте, однако, я обнаружил, что PreviewMouseMove
не срабатывает при нажатии левой кнопки мыши, хотя мышь явно движется по экрану. У меня никогда видел это раньше, и это заставляет меня грустить.
Это XAML я использую:
<Grid Background="{StaticResource BGGradientBrush}"
Margin="1"
PreviewMouseLeftButtonDown="Grid_PreviewMouseLeftButtonDown"
PreviewMouseMove="Grid_PreviewMouseMove">
<!-- snip -->
</Grid>
И это мой код позади:
private Point _startDragPoint;
private bool _isDragging;
private void Grid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
_startDragPoint = e.GetPosition(null);
System.Diagnostics.Trace.WriteLine("Test => (PreviewMouseLeftButtonDown) left click at " + _startDragPoint);
}
private void Grid_PreviewMouseMove(object sender, MouseEventArgs e)
{
System.Diagnostics.Trace.WriteLine("Test => (PreviewMouseMove) enter, e.LeftButton: " + e.LeftButton + ", _isDragging: " + _isDragging);
if (e.LeftButton == MouseButtonState.Pressed && !_isDragging)
{
System.Diagnostics.Trace.WriteLine(
"Test => (PreviewMouseMove) well, the left mouse button is pressed");
var position = e.GetPosition(null);
if (Math.Abs(position.X - _startDragPoint.X) > SystemParameters.MinimumHorizontalDragDistance ||
Math.Abs(position.Y - _startDragPoint.Y) > SystemParameters.MinimumVerticalDragDistance)
{
StartDrag();
}
}
}
private void StartDrag()
{
System.Diagnostics.Trace.WriteLine("Test => (StartDrag) started drag!");
}
Я мониторинг этих заявлений следовые через DebugView, и между временем Grid_PreviewMouseLeftButtonDown
является , пока левая кнопка мыши не отпущена, Grid_PreviewMouseMove
is never уволен.
Я совершенно озадачен, может ли кто-нибудь обнаружить что-то, что я делаю неправильно? Просто, чтобы здравомыслящий проверить себя, я имел в виду статью Jaime Rodriquez Drag & Drop in WPF Explained End to End, и я ясно использую ту же технику, что и он, так что может быть причиной этого? Я действительно надеюсь, что это просто что-то глупое, которого я пропускаю. Есть идеи?