Я пытаюсь настроить вид для печати моего окна WPF, и мне очень трудно правильно настроить размер содержимого (удивительно!).
В частности, измерение не похоже наустановка свойства DesiredSize моего окна.
Основной подход, который я пытаюсь использовать, состоит в том, что я создал отдельный объект Window (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 всегда имеет значение 0,0 после вызова .Measure, что вызываетпечатная страница должна быть пустой, конечно.Я думал, что .Measure должен установить это свойство.Интересно, что если вместо «Measure & Arrange» вставить туда вызов .ShowDialog (), он будет работать правильно, так что, насколько я понимаю, это означает, что проблема в том, что проход макета не произошел.Я просто не могу понять, как заставить это произойти.
Любая помощь будет принята с благодарностью.
РЕДАКТИРОВАТЬ: POSTING CODE FOR 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 (), и все работает как положено.