2010-08-04 63 views
1

我想設置我的WPF窗口的可打印視圖,並且我正在很難將內容正確設置大小(驚喜!)。WPF Window.Measure沒有設置DesiredSize

具體來說,Measure似乎沒有設置我的窗口的DesiredSize屬性。

我試圖採取的基本方法是我創建了一個單獨的窗口對象(PrintView),其中包含我希望打印的控件。我現在編程試圖實例化窗口,然後將其發送到打印機。

 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 

不幸的是,printView.DesiredSize在第3行有到.Measure一個呼叫,這會導致在打印頁爲空白,當然後總是0,0。我認爲這一點。測量應該設置該屬性。有趣的是,如果在那裏堅持呼叫.ShowDialog()而不是測量&安排,它工作正常,據我瞭解,這意味着問題是沒有發生佈局傳遞。我只是無法弄清楚如何強制它發生。

任何幫助將不勝感激。

編輯:FOR print查看

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> 

初始化爲每個用戶控件的調用揭開序幕很多東西的結合,等等...有涉及很多代碼。這些完全相同的控件在main.xaml頁面上使用,與.Initialize()調用相同,一切按預期工作。

回答

0

也許在顯示對話框工作的地方調用UpdateLayout可能會有效。