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(); }