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