从父控件中删除后如何重新排列和重新测量 UserControl?
How to re-Arrange and re-Measure a UserControl when it's removed from its parent?
我有一个 Border
,其中包含一个 UserControl
用于打印前预览。
由于在 UserControl
中完成的计算非常耗时,我想打印当前驻留在 Border
中的实例。
但是,当我从其父项(边框)中删除此 UserControl
时,我似乎无法重新排列和重新测量其尺寸。
UserControl
ActualWidth
和 ActualHeight
属性不受重新排列和重新测量的影响。
这是我的做法:
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
不影响打印尺寸的测量。
我有一个 Border
,其中包含一个 UserControl
用于打印前预览。
由于在 UserControl
中完成的计算非常耗时,我想打印当前驻留在 Border
中的实例。
但是,当我从其父项(边框)中删除此 UserControl
时,我似乎无法重新排列和重新测量其尺寸。
UserControl
ActualWidth
和 ActualHeight
属性不受重新排列和重新测量的影响。
这是我的做法:
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
不影响打印尺寸的测量。