ApplicationModalAdorner GetLayoutClip()InvalidOperationException

时间:2017-08-11 07:06:39

标签: wpf adorner

我有自己的ApplicationModalAdorner。有时我会从${systemd_unitdir}/system/获得InvalidOperationException,我会覆盖它。对GetLayoutClip()的调用会导致异常。我无法重现异常(我在日志记录中看到异常很多)。也许窗口没有完整呈现?我正在寻找复制(可能在一个简单的应用程序中)和这个例外的原因/解决方案。我在同一分钟内得到了例外几次。我更喜欢没有Dispatcher的解决方案。

相关的callstack部分:

TransformToAncestor

代码

Wrapped Exception: System.InvalidOperationException: An exception occured while handling another exception;
   bij System.Windows.Media.Visual.TrySimpleTransformToAncestor(Visual ancestor, Boolean inverse, GeneralTransform& generalTransform, Matrix& simpleTransform)
   bij System.Windows.Media.Visual.TransformToAncestor(Visual ancestor)
   bij x.x.x.ApplicationModalAdorner.WindowRect()
   bij x.x.x.ApplicationModalAdorner.GetLayoutClip(Size layoutSlotSize)
   bij System.Windows.UIElement.ensureClip(Size layoutSlotSize)
   bij System.Windows.UIElement.Arrange(Rect finalRect)
   bij System.Windows.Documents.AdornerLayer.ArrangeOverride(Size finalSize)
   bij System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
   bij System.Windows.UIElement.Arrange(Rect finalRect)
   bij System.Windows.Documents.AdornerDecorator.ArrangeOverride(Size finalSize)
   bij System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
   bij System.Windows.UIElement.Arrange(Rect finalRect)
   bij System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)
   bij System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
   bij System.Windows.UIElement.Arrange(Rect finalRect)
   bij MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)
   bij System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)
   bij System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
   bij System.Windows.UIElement.Arrange(Rect finalRect)
   bij System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)
   bij System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)
   bij System.Windows.UIElement.Arrange(Rect finalRect) 

1 个答案:

答案 0 :(得分:0)

您的窗口不在Visual Tree中。您有两种选择:

  1. 收听已加载事件。然后,加载时,开始侦听其他事件(Moved,WindowStateChanged,SizeChanged)。
  2. 在必要时使用调度员,然后希望最好。
  3. 至于您对示例应用的请求,我可以向您保证,您所看到的问题难以置信难以复制。