Что это обычно означает, ошибка HRESULT E_FAIL была возвращена после вызова компонента COM.? - PullRequest
6 голосов
/ 11 июня 2011

У меня есть особый вид с DataGrid (silverlight 4). Но у меня есть проект, где ресурсы были объединены с другим проектом (для обратной поддержки). Теперь, после этого слияния, я получаю эту ошибку всякий раз, когда пытаюсь добавить новую строку oject в свою коллекцию ObservableCollection ... Моя теория состоит в том, что что-то не так с xaml (который я могу коснуться!) Или, надеюсь, объединенные ресурсы (стили и кисти).

MS.Internal.WrappedException was unhandled by user code
  Message=Error HRESULT E_FAIL has been returned from a call to a COM component.
  StackTrace:
       at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
       at MS.Internal.XcpImports.UIElement_Measure(UIElement element, Size availableSize)
       at System.Windows.UIElement.Measure(Size availableSize)
       at System.Windows.Controls.DataGrid.InsertDisplayedElement(Int32 slot, UIElement element, Boolean wasNewlyAdded, Boolean updateSlotInformation)
       at System.Windows.Controls.DataGrid.OnAddedElement_Phase1(Int32 slot, UIElement element)
       at System.Windows.Controls.DataGrid.OnInsertedElement_Phase1(Int32 slot, UIElement element, Boolean isCollapsed, Boolean isRow)
       at System.Windows.Controls.DataGrid.InsertElement(Int32 slot, UIElement element, Boolean updateVerticalScrollBarOnly, Boolean isCollapsed, Boolean isRow)
       at System.Windows.Controls.DataGrid.InsertElementAt(Int32 slot, Int32 rowIndex, Object item, DataGridRowGroupInfo groupInfo, Boolean isCollapsed)
       at System.Windows.Controls.DataGrid.InsertRowAt(Int32 rowIndex)
       at System.Windows.Controls.DataGridDataConnection.NotifyingDataSource_CollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
       at System.Windows.Data.PagedCollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
       at System.Windows.Data.PagedCollectionView.ProcessAddEvent(Object addedItem, Int32 addIndex)
       at System.Windows.Data.PagedCollectionView.ProcessCollectionChanged(NotifyCollectionChangedEventArgs args)
       at System.Windows.Data.PagedCollectionView.<.ctor>b__0(Object sender, NotifyCollectionChangedEventArgs args)
       at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
       at System.Collections.ObjectModel.ObservableCollection`1.InsertItem(Int32 index, T item)
       at System.Collections.ObjectModel.Collection`1.Add(T item)
InnerException: 
       Message=Error HRESULT E_FAIL has been returned from a call to a COM component.
       StackTrace:
            at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
            at MS.Internal.XcpImports.FrameworkElement_MeasureOverride(FrameworkElement element, Size availableSize)
            at System.Windows.FrameworkElement.MeasureOverride(Size availableSize)
            at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight)
       InnerException: 

1 Ответ

20 голосов
/ 15 марта 2012

Обычно это означает, что существует проблема с вашим XAML, который не может быть проверен во время разработки, но проявится во время выполнения. Учитывая ваш сценарий, я предполагаю, что добавляемая вами строка может привести к ошибке одного из шаблонов столбцов Datagrid.

Обычно это происходит из-за ссылки на стиль или обработчик события, который не существует или не находится в контексте XAML. По моему опыту, это обычное явление в разработке пользовательских элементов управления.

Смотрите мой ответ на похожий вопрос здесь .

НТН.

...