测量并安排一个WPF控件以使用可用空间



我有一个窗口,它有一个菜单、顶部的工具栏和各种其他控件。然后,我有了自己的控件,该控件派生自ContentControl,我希望它使用掉所有剩余的空间。不幸的是,我不能把它留给自己的设备,因为该控件是一个Win32控件,有点。。。放在这个WPF控件中,我需要使用SetWindowPos。

目前我正在使用ArrangeOverride,获取MainWindow.Content控件并查看Height和Width。然后,我使用Size作为参数,并调用SetWindowPos函数。它是用C++/CLI编写的,代码如下:

Size WebView::ArrangeOverride(Size finalSize)
    {
            Application::Current->MainWindow->Measure(finalSize);
            UIElement^ obj = dynamic_cast<UIElement^>(Application::Current->MainWindow->Content);
            double objHei = obj->RenderSize.Height;
            double objWid = obj->RenderSize.Width;
            SetWindowPos(hWnd, NULL, objWid-finalSize.Width, objHei-finalSize.Height, finalSize.Width, finalSize.Height, NULL);

因此,在我的脑海中,我认为这会将控件的位置设置为剩余可用空间内。它确实起到了一定的作用,但似乎MainWindow.内容控制直到之后才被测量?我在这里做错了什么?

edit:大多数问题似乎都是在完全屏蔽窗口然后取消完全屏蔽时出现的。

我已经通过使用中这个问题的答案解决了这个问题

我只是简单地将控件放入一个Frame中,这样它就成为了父控件。

然后使用Point I将窗口位置设置为该位置,以及作为参数传递给ArrangeOverride方法的大小。

最新更新