DragMove запускает модальный цикл сообщений и не возвращается, пока кнопка мыши не будет отпущена, поэтому к тому времени, когда кнопка получает событие MouseLeftButtonDown, она уже потеряла шанс щелкнуть.
Я предполагаю, что вы не хотите, чтобы щелчок происходил, если пользователь перетаскивает окно. Один из подходов состоит в том, чтобы сделать что-то похожее на drag-drop, и вызывать DragMove только в том случае, если мышь начинает двигаться, пока она нажата. Прикрепите обработчики к PreviewMouseLeftButtonDown и PreviewMouseMove на кнопке:
<Button Name="toggleButton" Click="toggleButton_Click"
Canvas.Left="177" Canvas.Top="0"
PreviewMouseMove="toggleButton_PreviewMouseMove"
PreviewMouseLeftButtonDown="toggleButton_PreviewMouseLeftButtonDown">
<Button.Template>
<ControlTemplate>
<Image Source="/FootballRssReader;component/images/ball.png"/>
</ControlTemplate>
</Button.Template>
</Button>
Запишите положение мыши в обработчике PreviewLeftMouseButtonDown, а затем запустите DragMove в обработчике PreviewMouseMove, если мышь начала двигаться:
private Point startPoint;
private void toggleButton_PreviewMouseLeftButtonDown(
object sender, MouseButtonEventArgs e)
{
startPoint = e.GetPosition(toggleButton);
}
private void toggleButton_PreviewMouseMove(object sender, MouseEventArgs e)
{
var currentPoint = e.GetPosition(toggleButton);
if (e.LeftButton == MouseButtonState.Pressed &&
toggleButton.IsMouseCaptured &&
(Math.Abs(currentPoint.X - startPoint.X) >
SystemParameters.MinimumHorizontalDragDistance ||
Math.Abs(currentPoint.Y - startPoint.Y) >
SystemParameters.MinimumVerticalDragDistance))
{
// Prevent Click from firing
toggleButton.ReleaseMouseCapture();
DragMove();
}
}