C#WPF移动窗口

我在Window添加了以下参数:

 WindowStyle="None" WindowStartupLocation="CenterScreen" AllowsTransparency="True" ResizeMode="NoResize" Background="Transparent" 

现在我无法移动Window ,所以我将以下部分代码添加到我的Window

 #region Window: Moving private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { DragMove(); } #endregion 

另外,我必须指定我的Window中的XAML代码如下( Window看起来像Polygon ):

      

我想知道我应该怎么做才能让Window改变它在鼠标拖动时的位置以及添加什么来调整窗口的大小,条件是我将添加的控件和其他东西也会resize(我发现这段代码可以resize)我想知道这里是否好。)

找到一个例子: http : //cloudstore.blogspot.com.br/2008/06/moving-wpf-window-with-windowstyle-of.html

无论如何,要在WinForms中移动一个Window,我在项目中使用以下代码,如果遇到问题可能会很有用:

 private bool clicado = false; private Point lm = new Point(); void PnMouseDown(object sender, MouseEventArgs e) { clicado = true; this.lm = MousePosition; } void PnMouseUp(object sender, MouseEventArgs e) { clicado = false; } void PnMouseMove(object sender, MouseEventArgs e) { if(clicado) { this.Left += (MousePosition.X - this.lm.X); this.Top += (MousePosition.Y - this.lm.Y); this.lm = MousePosition; } } 

@Marcio在WPF中没有Windows.Forms。

我用WPF让这个版本工作(稳定),

 private bool clicked = false; private Point lmAbs = new Point(); void PnMouseDown(object sender, System.Windows.Input.MouseEventArgs e) { clicked = true; this.lmAbs = e.GetPosition(this); this.lmAbs.Y = Convert.ToInt16(this.Top) + this.lmAbs.Y; this.lmAbs.X = Convert.ToInt16(this.Left) + this.lmAbs.X; } void PnMouseUp(object sender, System.Windows.Input.MouseEventArgs e) { clicked = false; } void PnMouseMove(object sender, System.Windows.Input.MouseEventArgs e) { if (clicked) { Point MousePosition = e.GetPosition(this); Point MousePositionAbs = new Point(); MousePositionAbs.X = Convert.ToInt16(this.Left) + MousePosition.X; MousePositionAbs.Y = Convert.ToInt16(this.Top) + MousePosition.Y; this.Left = this.Left + (MousePositionAbs.X - this.lmAbs.X); this.Top = this.Top + (MousePositionAbs.Y - this.lmAbs.Y); this.lmAbs = MousePositionAbs; } } 

亲切的问候,

莱克斯

很好的代码答案,但越野车。 它会让你失去控制。

试试我的修改:

 private bool clicado = false; private Point lm = new Point(); void PnMouseDown(object sender, System.Windows.Input.MouseEventArgs e) { clicado = true; this.lm = System.Windows.Forms.Control.MousePosition; this.lm.X = Convert.ToInt16(this.Left) - this.lm.X; this.lm.Y = Convert.ToInt16(this.Top) - this.lm.Y; } void PnMouseUp(object sender, System.Windows.Input.MouseEventArgs e) { clicado = false; } void PnMouseMove(object sender, System.Windows.Input.MouseEventArgs e) { if (clicado) { this.Left = (System.Windows.Forms.Control.MousePosition.X + this.lm.X); this.Top = (System.Windows.Forms.Control.MousePosition.Y + this.lm.Y); } } 

它会让你移动到你的光标上。(///▽///)

我尝试了另一种解决方案并且工作(不确定它是否是最正确的)

 private void GridOfWindow_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { var move = sender as System.Windows.Controls.Grid; var win = Window.GetWindow(move); win.DragMove(); } 

其中GridOfWindow是Grid的名称

  

我使用了MouseDown事件:

  

使用此代码:

  private void Window_MouseDown(object sender, MouseButtonEventArgs e) { if(e.ChangedButton == MouseButton.Left) this.DragMove(); }