从父控件中删除后如何重新排列和重新测量 UserControl?

How to re-Arrange and re-Measure a UserControl when it's removed from its parent?

我有一个 Border,其中包含一个 UserControl 用于打印前预览。

由于在 UserControl 中完成的计算非常耗时,我想打印当前驻留在 Border 中的实例。

但是,当我从其父项(边框)中删除此 UserControl 时,我似乎无法重新排列和重新测量其尺寸。

UserControl ActualWidthActualHeight 属性不受重新排列和重新测量的影响。

这是我的做法:

XZReport rap = new XZReport();
xzPreview.Child = rap;

...

xzPreview.Child = null;
PrintDialog dlg = new PrintDialog();

rap.Measure(new Size(dlg.PrintableAreaWidth, double.PositiveInfinity));
rap.Arrange(new Rect(rap.DesiredSize));
rap.UpdateLayout();
// setting a breakpoint here, I see ActualWidth and ActualHeight properties are not changed

通过将我的计算移动到 ViewModel 来解决它,然后它允许我使用我的 ViewModel 的第一个实例而无需重新计算所有内容,并允许我创建一个新实例我的 View 不影响打印尺寸的测量。