WPF Window.Measure没有设置DesiredSize

时间:2010-08-04 20:43:51

标签: wpf printing

我正在尝试设置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()的调用相同,一切都按预期工作。

1 个答案:

答案 0 :(得分:0)

也许在显示对话框工作的时候调用UpdateLayout可能会解决问题。