C#WPF移动窗口

C#WPF移动窗口,c#,wpf,resize,window,C#,Wpf,Resize,Window,我已将以下参数添加到我的窗口中: WindowStyle="None" WindowStartupLocation="CenterScreen" AllowsTransparency="True" ResizeMode="NoResize" Background="Transparent" 现在我无法移动窗口,因此我已将以下部分代码添加到我的窗口: #region Window: Moving private void OnMouseLeftButtonDown(object sender

我已将以下参数添加到我的
窗口中

WindowStyle="None"
WindowStartupLocation="CenterScreen"
AllowsTransparency="True"
ResizeMode="NoResize" Background="Transparent" 
现在我无法移动
窗口
,因此我已将以下部分代码添加到我的
窗口

#region Window: Moving

private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    DragMove();
}

#endregion
此外,我必须指定我的
窗口中的
XAML
代码如下所示(该
窗口类似于
多边形
):


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

找到了一个例子:

无论如何,要在我在项目中使用的WinForms中移动窗口,以下代码在出现问题时非常有用:

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

答案的代码很好,但有问题。这会让你失去控制

尝试我的修改:

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

它会让你的移动棒指向你的光标(///▽///)

@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;
  }
}
亲切问候,


Lex

我尝试了另一种解决方案并成功了(但不确定它是否最正确)

其中GridOfWindow是网格的名称

<Grid x:Name="GridOfWindow" MouseLeftButtonDown="GridOfWindow_MouseLeftButtonDown">

我使用了MouseDown事件:

<Window .....
     MouseDown="Window_MouseDown"  >

这是最干净的方法,没有任何错误/问题作为主要答案。
<Window .....
     MouseDown="Window_MouseDown"  >
  private void Window_MouseDown(object sender, MouseButtonEventArgs e)
  {
     if(e.ChangedButton == MouseButton.Left)
        this.DragMove();
  }