2009-12-28 59 views
1

我有一些ChildWindow控件的問題,我創建了一個錯誤窗口控件,它在app.xaml.cs中捕獲到未處理的異常之後顯示。問題是當我嘗試顯示錯誤窗口,有時它工作正常,但有時我得到這個令人討厭的異常:ChildWindow.Show()上的HRESULT E_FAIL()

消息: 錯誤HRESULT E_FAIL已從調用返回到COM組件。

堆棧跟蹤: 在MS.Internal.XcpImports.CheckHResult(UInt32的小時)在MS.Internal.XcpImports.SetValue(INativeCoreTypeWrapper OBJ,的DependencyProperty屬性,布爾B)在System.Windows.DependencyObject.SetValue(的DependencyProperty屬性,布爾b)在System.Windows.Controls.Primitives.Popup.set_IsOpen(布爾值)在System.Windows.Controls.ChildWindow.Show()在FrontEnd.SL.Util.GuiLogger.ShowErrorWindow(ErrorDetails詳細信息,ErrorSeverity嚴重性)


您看到的跟蹤是在ChildWindow的Show()方法內。
換句話說,我的代碼是:
ErrorWindow errorWin = new ErrorWindow();
errorWin.Show();
其中ErrorWindow:ChildWindow

任何幫助是極大的讚賞..

+0

只有當原始未處理的異常是某種類型時纔會發生這種情況嗎? – 2009-12-28 19:50:04

回答

1

在我看來,使用一個ChildWindow控制將是容易出現一些問題。由於例外情況,如果現任VisualTree處於不一致/中斷狀態,會發生什麼情況?

您必須在應用程序的邊界內「處理」未處理的異常的最佳機會是完全替換由VisualRoot保留的現有對象。

+0

你好安東尼, 你說得對,看來VisualTree的狀態確實是由於被發現的錯誤而破壞的。在這些情況下,我不需要使用.Show()方法,而需要手動將ChildWindow添加到RootVisual。有點拙劣的工作,但你可以做什麼:S – Boris 2009-12-29 16:03:10

+0

+1,請你詳細說明爲什麼使用ChildWindow控件容易出現問題?謝謝! – VoodooChild 2010-11-25 18:26:32

+0

@VoodooChild:通過創建覆蓋整個Sliverlight客戶區的半透明矩形,子窗口創建模態的幻覺。因此,打開Childwindow後,所有鼠標移動都會移至子窗口。如果MouseOver狀態完全基於MouseEnter/MouseLeave事件和一個子窗口,在MouseOver狀態下啓動時,它將不會獲取相應的MouseLeave事件。當子窗口被解散時,鼠標不再位於原始元素上方。 – AnthonyWJones 2010-11-26 09:12:26

0

如果加載子窗口的內容時出現問題,也會發生這種情況。在我的情況下,我在usercontrol的代碼隱藏和它的xaml中指定了不同的命名空間,這導致了這個神祕的錯誤。

相關問題