Я столкнулся с подобной проблемой, когда я пытаюсь вызвать Measure
и передать динамически рассчитанный размер этому методу:
Переопределение измерения макета элемента 'System.Windows.Controls.StackPanel' не должно возвращать значения NaN как его DesiredSize.
Я пытаюсь создать StackPanel на лету и распечатать ее. Вот мой код:
StackPanel printPanel = new StackPanel();
PrintableArea.Children.Remove(ChartBorder);
printPanel.Children.Add(ChartBorder);
//Get selected printer capabilities
System.Printing.PrintCapabilities capabilities = dialog.PrintQueue.GetPrintCapabilities(dialog.PrintTicket);
//Get scale of the print wrt to screen of visual
double scale = Math.Min(capabilities.PageImageableArea.ExtentWidth / printPanel.ActualWidth, capabilities.PageImageableArea.ExtentHeight / printPanel.ActualHeight);
//Transform the Visual to scale
printPanel.LayoutTransform = new ScaleTransform(scale, scale);
//Get the size of the printer page
Size sz = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight);
//Update the layout of the visual to the printer page size.
printPanel.Measure(sz);
printPanel.Arrange(new Rect(new Point(capabilities.PageImageableArea.OriginWidth, capabilities.PageImageableArea.OriginHeight), sz));
dialog.PrintVisual(printPanel, "Test");
Любая подсказка, что может быть причиной этого? И странно то, что это происходит только с StackPanel
. Если я попытаюсь создать простой TextBlock
для тестирования и распечатать его, все будет работать без ошибок. Мне было интересно, что отличается, когда мы называем Measure
для StackPanel
?
Любая помощь, чтобы решить эту проблему, была бы очень полезна!