我正在尝试设置WPF窗口的可打印视图,但我很难让内容大小合适(惊喜!)。
具体来说,Measure似乎没有设置我窗口的DesiredSize属性。
我想要的基本方法是创建了一个单独的Window对象(PrintView),其中包含我想要打印的控件。我现在以编程方式尝试实例化Window,然后将其发送到打印机。
PrintView printView = new PrintView(m_Model.Clone() as MyModel);
printView.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
printView.Arrange(new Rect(new Point(0, 0), printView.DesiredSize));
thePrintDialog.PrintVisual(printView, "Strategy");//blank page every time
不幸的是,第3行的printView.DesiredSize在调用.Measure之后始终为0,0,这导致打印页面为空白。我想是的。测量应该是设置那个属性。有趣的是,如果在那里坚持调用.ShowDialog()而不是测量&安排,它工作正常,据我所知,这意味着问题是布局传递没有发生。我无法弄清楚如何强迫它发生。
非常感谢任何帮助。
编辑:为PrintView发布代码
public PrintView(MyModel p_Model)
{
InitializeComponent();
TabSetContent1.Initialize(p_Model, p_Model, new Model.Workbook());
TabCompareContent1.Initialize(p_Model, new Model.Workbook());
}
和XAML:
<Window x:Class="Cmi.Analytics.DecisionPathway.Ui.UserControls.Printing.PrintView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:components="clr-namespace:MyNamespace">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<components:TabSetContent x:Name="TabSetContent1" Grid.Row="0" IsPrintView="true" />
<components:TabCompareContent x:Name="TabCompareContent1" Grid.Row="1" IsPrintView="true" />
</Grid>
</Window>
对每个用户控件的Initialize调用启动了大量的绑定等等......这涉及到相当多的代码。这些完全相同的控件在main.xaml页面上使用,对.Initialize()的调用相同,一切都按预期工作。
答案 0 :(得分:0)
也许在显示对话框工作的时候调用UpdateLayout可能会解决问题。