C# 正确创建双窗口行为

C# 正确创建双窗口行为,c#,wpf,C#,Wpf,嗨,我想创建一个合适的“双窗口行为”。如果你不明白我的意思,这里有一个截图: 目前,我有以下代码: public partial class MainWindow : Window { Window sideWindow; public MainWindow() { InitializeComponent(); } private void Window_Loaded(object sender, RoutedEventArgs e) {

嗨,我想创建一个合适的“双窗口行为”。如果你不明白我的意思,这里有一个截图:

目前,我有以下代码:

public partial class MainWindow : Window {

    Window sideWindow;

    public MainWindow() {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e) {
        sideWindow = new SideWindow() { Owner = this };
        AdjustSideWindow();
        sideWindow.Show();
    }

    private void AdjustSideWindow(bool heightChanged = false) {
        if (!(sideWindow == null)) {
            if (heightChanged) sideWindow.Height = this.Height;
            sideWindow.Left = this.Left + this.Width;
            sideWindow.Top = this.Top;
        }
    }

    private void Window_LocationChanged(object sender, EventArgs e) {
        AdjustSideWindow();
    }

    private void Window_SizeChanged(object sender, SizeChangedEventArgs e) {
        AdjustSideWindow(e.HeightChanged);
    }
}
但我并不满意:快速移动/调整
主窗口的大小时会出现一些闪烁,因为
位置已更改
大小更改
的提升速度不如鼠标移动的速度快。结果是
侧窗口
的移动方式与
主窗口
的移动方式不完全相同

我想知道是否有一个较低层次的方法来做这件事。例如,使用一点P/Invoke或类似的东西

…或附加/绑定/链接两个窗口的
Height
属性的任何方式


…否则,我可以用间隔属性为1毫秒的计时器来完成,但对我来说,它看起来太像黑客了。

正如我所问的,你的问题太宽泛了。也就是说,在我看来,您应该做的不是两个窗口,而是一个带有两列
网格的单个窗口,以及一个用于控制两个面板的窗口。你可以在这里看到一个如何工作的例子:不,我希望它有两个窗口,就像TeamViewer 11.+1一样,因为我实际上认为这是一个常见的问题,不要认为它太宽泛。我对解决这个问题很感兴趣。。。不知何故,我进入了布局系统,并同步了两个没有直接连接的视觉效果。@MarkusHütter谢谢:)我来这里是想获得一些想法,它可能有点太宽了,这很正常……所以事情是这样的。另一个用户已经发现,
窗口
不仅仅是一个常规控件,它是WinAPI的包装器,请参阅。这意味着您无法对
宽度
高度
进行传统的双向装订,甚至无法进行单向装订。如前所述,您的问题过于宽泛。也就是说,在我看来,您应该做的不是两个窗口,而是一个带有两列
网格的单个窗口,以及一个用于控制两个面板的窗口。你可以在这里看到一个如何工作的例子:不,我希望它有两个窗口,就像TeamViewer 11.+1一样,因为我实际上认为这是一个常见的问题,不要认为它太宽泛。我对解决这个问题很感兴趣。。。不知何故,我进入了布局系统,并同步了两个没有直接连接的视觉效果。@MarkusHütter谢谢:)我来这里是想获得一些想法,它可能有点太宽了,这很正常……所以事情是这样的。另一个用户已经发现,
窗口
不仅仅是一个常规控件,它是WinAPI的包装器,请参阅。这意味着您无法对
宽度
高度
进行传统的双向绑定,甚至无法进行单向绑定。