Окно WPF. Не устанавливайте DesiredSize - PullRequest
1 голос
/ 05 августа 2010

Я пытаюсь настроить вид для печати моего окна 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 (), и все работает как положено.

1 Ответ

0 голосов
/ 21 мая 2011

Возможно, вызов UpdateLayout в точке, где показ диалога работает, может сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...