【发布时间】:2011-07-25 06:40:30
【问题描述】:
我的应用程序是多窗口的。如果发生 XamlParseException,则整个应用程序将关闭。
我最想做的是关闭这个错误的“负责”窗口。
您知道实现此目的的方法吗?
异常示例:
System.Windows.Markup.XamlParseException:在“System.Windows.Markup.StaticResourceHolder”上提供值引发异常。 ---> System.Exception:找不到名为“PasteCommandRef”的资源。资源名称区分大小写。 在 System.Windows.StaticResourceExtension.ProvideValueInternal(IServiceProvider serviceProvider,布尔 allowDeferredReference) 在 System.Windows.StaticResourceExtension.ProvideValue(IServiceProvider serviceProvider) 在 MS.Internal.Xaml.Runtime.ClrObjectRuntime.CallProvideValue(MarkupExtension me,IServiceProvider serviceProvider) --- 内部异常堆栈跟踪结束 --- 在 System.Windows.Markup.XamlReader.RewrapException(异常 e,Uri baseUri) 在 System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlReader templateReader,XamlObjectWriter currentWriter) 在 System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlObjectWriter objectWriter) 在 System.Windows.FrameworkTemplate.LoadOptimizedTemplateContent(DependencyObject 容器,IComponentConnector 组件连接器,IStyleConnector 样式连接器,列表`1 受影响的孩子,UncommonField`1 模板非FeChildrenField) 在 System.Windows.FrameworkTemplate.LoadContent(DependencyObject 容器,列表`1 受影响的孩子) 在 System.Windows.StyleHelper.ApplyTemplateContent(UncommonField`1 dataField,DependencyObject 容器,FrameworkElementFactory templateRoot,Int32 lastChildIndex,HybridDictionary childIndexFromChildID,FrameworkTemplate frameworkTemplate) 在 System.Windows.FrameworkTemplate.ApplyTemplateContent(UncommonField`1 templateDataField,FrameworkElement 容器) 在 System.Windows.FrameworkElement.ApplyTemplate() 在 System.Windows.FrameworkElement.MeasureCore(可用大小) 在 System.Windows.UIElement.Measure(可用大小) 在 System.Windows.Controls.Primitives.UniformGrid.MeasureOverride(大小约束) 在 System.Windows.FrameworkElement.MeasureCore(可用大小) 在 System.Windows.UIElement.Measure(可用大小) 在 MS.Internal.Helper.MeasureElementWithSingleChild(UIElement 元素,大小约束) 在 System.Windows.Controls.ItemsPresenter.MeasureOverride(大小约束) 在 System.Windows.FrameworkElement.MeasureCore(可用大小) 在 System.Windows.UIElement.Measure(可用大小) 在 System.Windows.Controls.Border.MeasureOverride(大小约束) 在 System.Windows.FrameworkElement.MeasureCore(可用大小) 在 System.Windows.UIElement.Measure(可用大小) 在 System.Windows.Controls.Control.MeasureOverride(大小约束) 在 System.Windows.FrameworkElement.MeasureCore(可用大小) 在 System.Windows.UIElement.Measure(可用大小) 在 System.Windows.Controls.Grid.MeasureCell(Int32 单元格,布尔 forceInfinityV) 在 System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead,大小 referenceSize,布尔 ignoreDesiredSizeU,布尔 forceInfinityV) 在 System.Windows.Controls.Grid.MeasureOverride(大小约束) 在 System.Windows.FrameworkElement.MeasureCore(可用大小) 在 System.Windows.UIElement.Measure(可用大小) 在 System.Windows.Controls.Grid.MeasureCell(Int32 单元格,布尔 forceInfinityV) 在 System.Windows.Controls.Grid.MeasureCellsGroup(Int32 cellsHead,大小 referenceSize,布尔 ignoreDesiredSizeU,布尔 forceInfinityV) 在 System.Windows.Controls.Grid.MeasureOverride(大小约束) 在 System.Windows.FrameworkElement.MeasureCore(可用大小) 在 System.Windows.UIElement.Measure(可用大小) 在 System.Windows.ContextLayoutManager.UpdateLayout() 在 System.Windows.ContextLayoutManager.UpdateLayoutCallback(对象 arg) 在 System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork() 在 System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks() 在 System.Windows.Media.MediaContext.RenderMessageHandlerCore(对象 resizedCompositionTarget) 在 System.Windows.Media.MediaContext.RenderMessageHandler(对象 resizedCompositionTarget) 在 System.Windows.Threading.ExceptionWrapper.InternalRealCall(委托回调,对象 args,Int32 numArgs) 在 MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
【问题讨论】:
-
愚蠢的答案,但避免 XamlParseException 将是处理它的最佳方法。这是一个非常严重的异常(这可能意味着在初始化控件时发生了一些问题),忽略它只会破坏 UI 的外观:/