当我尝试调用
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
时有什么不同?
任何解决此问题的帮助都会非常好!
您可能将 Size(double.NaN, double.NaN) 传递给 Measure 调用,这很糟糕。您的 printPanel.ActualWidth/ActualHeight 应为 0.0,这会导致 NaN。这就是 Double 定义 NaN 的方式:
public const double NaN = (double) 0.0 / (double) 0.0;
因此您需要传入 Size(double.PositiveInfinity, double.PositiveInfinity) 以获得所需的大小。安排好 printPanel 后,ActualWidth/ActualHeight 应该有效。
'System.InvalidOperationException: Override layout unit for element
'System.Windows.Controls.Border' should not return NaN value to DesiredSize.'
我遇到过这个错误。除了边框之外,几乎是一样的。
我找到了 DesiredSize 的 NaN 值不再出现的解决方案。我已将 LibVLCSharp 版本从 3.8.2 降级到 3.6.6
<package id="LibVLCSharp" version="3.6.6" targetFramework="net48" />
<package id="LibVLCSharp.Forms" version="3.6.6" targetFramework="net48" />
<package id="LibVLCSharp.Forms.WPF" version="3.6.6" targetFramework="net48" />
<package id="LibVLCSharp.WPF" version="3.6.6" targetFramework="net48" />
VS 社区 22 -> 工具 -> NuGet 包管理器 -> NuGet 解决方案: 您可以在那里升级或降级 NuGet 软件包。