Private Point startPoint;
private void Window_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
startPoint = e.GetPosition(null);
}
private void Window_MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
Point relative = e.GetPosition(null);
Point AbsolutePos = new Point(relative.X + this.Left, relative.Y + this.Top);
this.Top = AbsolutePos.Y - startPoint.Y;
this.Left = AbsolutePos.X - startPoint.X;
}
}
Это работает для перетаскивания моего окна, но, как было сказано, если я двигаю мышь, чтобы быстро, получить бы из окна и остановить поднятие события. Не говоря уже о том, что перетаскивание не является гладко. Кто-нибудь знает, как это сделать правильно, приятно и плавно перетаскивать, не теряя при перетаскивании слишком быстро ??? Отправьте простой пример, если это возможно, за исключением целого учебника, в котором бы начинающие, как я потерял код. Благодаря!
** ** Ой! Нет, используйте [`Thumb`] (http://msdn.microsoft.com/en-us/library/ms749252%28VS.100%29.aspx) и его событие` DragDelta` вместо этого (выберите «DragStarted»/`DragCompleted`, если вы хотите управлять состояниями). Это намного эффективнее, не будет фрагментировать память и не рискует потерять мышь в качестве примера выше. Вот как перетаскивание выполняется правильно :) См. Здесь [здесь] (http://www.codeproject.com/KB/WPF/TubePlanner.aspx). – RedGlyph 2010-09-02 19:37:33
Я согласен, что решение, которое я дал, это просто взломать. Как вы сказали, DragDelta более совершенен, чем MoveMove. – 2010-09-02 21:16:44
Но что, если вы не хотите злоупотреблять всплывающим окном в виде большого пальца (что, я думаю, я имел в виду в комментарии RedGlyphs), но вы хотите переместить более сложное всплывающее окно (например, наложение видео). использование явного окна не является вариантом в моем сценарии. – 2011-07-26 13:39:57