Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF将两个窗口一起移动_C#_.net_Wpf - Fatal编程技术网

C# WPF将两个窗口一起移动

C# WPF将两个窗口一起移动,c#,.net,wpf,C#,.net,Wpf,我有两种类型的窗口:主窗口和子窗口。当我移动主窗口时,所有子窗口也必须移动。我所有的窗口都有样式None,所以我使用DragMove。对于移动孩子,我使用Main的LocationChange。若我开始快速移动主窗口,那个么孩子移动会有一些延迟。我的窗口彼此粘连,所以当快速移动主窗口时,会出现一些间隙。 我用这个问题 我如何减少这种差距 一些代码: private void Grid_MouseLeftButtonDown(object sender, MouseButtonEvent

我有两种类型的窗口:主窗口和子窗口。当我移动主窗口时,所有子窗口也必须移动。我所有的窗口都有样式
None
,所以我使用
DragMove
。对于移动孩子,我使用Main的
LocationChange
。若我开始快速移动主窗口,那个么孩子移动会有一些延迟。我的窗口彼此粘连,所以当快速移动主窗口时,会出现一些间隙。 我用这个问题

我如何减少这种差距

一些代码:

    private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        StickyWindow.ParentWndStartMove(this);
        this.DragMove();
    }
我把所有的孩子都搬走了

    public static void ParentWndMove(Window parentWindow)
    {
        for (int i = 0; i < windowsToMove.Length; i++)
        {
            if (windowsToMove[i])
            {
                windows[i].Top += -(parentWindowPosition.Y - parentWindow.Top);
                windows[i].Left += -(parentWindowPosition.X - parentWindow.Left);
            }
        }

        parentWindowPosition.X = parentWindow.Left;
        parentWindowPosition.Y = parentWindow.Top;
    }
publicstaticvoidparentwndmove(windowparentwindow)
{
对于(int i=0;i
我将根据您的代码片段做出一个假设,parentWindowPosition 是一个结构或类,其X和Y初始化为主窗口的左值和顶值

LocationChanged += MainWindow_OnLocationChanged;
如果是这种情况,那么在MouseLeftButtonDown处理程序中唯一需要做的就是调用DragMove()

在主窗口的LocationChanged事件上注册处理程序

LocationChanged += MainWindow_OnLocationChanged;
它调用ParentWndMove()方法

这段代码在我的系统上工作,没有延迟,无论我以多快的速度拖动主窗口,窗口位置永远不会不同步

注意:您发布的ParentWndMove()方法有一些编译时错误。我正在发布一个固定版本供参考

public static void ParentWndMove(Window parentWindow)
{
    for (int i = 0; i < windowsToMove.Length; i++)
    {
        if (windowsToMove[i] != null)
        {
            windowsToMove[i].Top += -(parentWindowPosition.Y - parentWindow.Top);
            windowsToMove[i].Left += -(parentWindowPosition.X - parentWindow.Left);
        }
    }

    parentWindowPosition.X = parentWindow.Left;
    parentWindowPosition.Y = parentWindow.Top;
}
publicstaticvoidparentwndmove(windowparentwindow)
{
对于(int i=0;i
以下是我所做的:

我首先将父窗口的一个实例设置为子窗口的所有者(通过在ParentWindow类
公共静态ParentWindow实例中设置它来创建一个实例;
然后
实例=此;
):

然后,我在父类中添加一个事件处理程序,以便在父类移动时触发:

public ParentWindow()
{
    InitializeComponent();
    LocationChanged += new EventHandler(Window_LocationChanged);
}
现在,我遍历ParentWindow所属的所有窗口以重置其边距:

private void Window_LocationChanged(object sender, EventArgs e)
{
    foreach (Window win in this.OwnedWindows)
    {
        win.Top = this.Top + ((this.ActualHeight - win.ActualHeight) / 2);
        win.Left = this.Left + ((this.ActualWidth - win.ActualWidth) / 2);
    }
}

你能分享代码吗?这里添加了一个示例项目:如果我移动得快,我可以在两个窗口之间看到手机图片。
public ParentWindow()
{
    InitializeComponent();
    LocationChanged += new EventHandler(Window_LocationChanged);
}
private void Window_LocationChanged(object sender, EventArgs e)
{
    foreach (Window win in this.OwnedWindows)
    {
        win.Top = this.Top + ((this.ActualHeight - win.ActualHeight) / 2);
        win.Left = this.Left + ((this.ActualWidth - win.ActualWidth) / 2);
    }
}