Подтвердить что ты не робот

WPF Рекурсивный вызов метода автоматизации Peer API недействителен

Я получаю сообщение об ошибке "Рекурсивный вызов метода автоматизации Peer API недействителен" при загрузке datagrid с помощью столбца datatemplate, содержащего столбец combobox. Ошибка заканчивается в нашем необработанном коде исключения. Это, похоже, проблема на моей машине, и Google не предоставил никаких указаний по решению проблемы. Проблема возникает, только когда я заполняю выпадающие списки с данными. Заполнение списков сопоставлений (если я не загружаю данные) работает правильно, и пока отображается ошибка, я могу видеть, что данные правильно извлекаются в фоновом режиме.

Я использую WPat datagrid, где я использую DataGridTemplateColumn для добавления combobox внутри сетки. У меня есть выпадающий список, связанный с перечислением с использованием объекта dataatrovider. В коде, который стоит при инициализации моего экрана, я использую оператор Linq2Sql для извлечения данных и заполнения Itemssource сетки.

<grid:DataGrid.Resources>
 <ObjectDataProvider
  x:Key="ChangeTypeData"
  MethodName="GetValues"
  ObjectType="{x:Type System:Enum}">
  <ObjectDataProvider.MethodParameters>
   <x:Type TypeName="namespace:ChangeType" />
  </ObjectDataProvider.MethodParameters>
 </ObjectDataProvider>     
    </grid:DataGrid.Resources>

 <grid:DataGrid.Columns>
 <grid:DataGridTextColumn Binding="{Binding DatapointName}" Header="Datapoint Changed" IsReadOnly="True" Width="Auto" />
 <grid:DataGridTemplateColumn Header="Change Type">
  <grid:DataGridTemplateColumn.CellTemplate>
   <DataTemplate>
    <ComboBox
     Text="{Binding Path=ChangeTypeName}"
     ItemsSource="{Binding Source={StaticResource ChangeTypeData}}"
     Name="dgcboChangeType"
SelectionChanged="dgcboChangeType_SelectionChanged"/>
   </DataTemplate>
  </grid:DataGridTemplateColumn.CellTemplate>

Все рекомендации по решению этой проблемы приветствуются.

4b9b3361

Ответ 1

Я обошел проблему на моем конце, отключив Automation на элементе управления сеткой. Я обнаружил, что проблема была уникальной для элемента управления WPF Toolkit, но у меня возникли проблемы с переходом на официальный релиз DataGrid 4.0 (не связанный с этим вопросом.)

Поэтому вместо этого я получаю класс из WPFToolkit и поставлю это переопределение:

protected override AutomationPeer OnCreateAutomationPeer()
{
   return null;
}

Может кто-то может сказать нам, если это хорошая идея или нет.

Ответ 2

У меня возникает одна и та же проблема: используете ли вы datagrid из WPFToolkit или тот, который поставляется с .NET 4.0. Мы все еще используем этот набор инструментов.

Кроме того, я заметил, что эта проблема не возникает при использовании приложения через удаленный рабочий стол.

Аналогичная проблема размещена здесь:

http://wpf.codeplex.com/workitem/14443

С предлагаемым решением. У него не было возможности попробовать.

Ответ 3

Я получал ту же проблему в NET 3.5 с WPFoolkit DataGrid.

Я связал свой WPFoolkit DataGrid с EntityFramework ObservableCollection, с иерархией сущностей, которые имеют двухсторонние ассоциации (Parent ↔ Items).

Я решил проблему, отключив неявно включенные AutoGenerateColumns в DataGrid и вручную установил столбцы.

Надеюсь, что это поможет.

Ответ 4

У меня была точно такая же ошибка. Однако для меня было странно, что одно приложение отлично работало на моем ноутбуке и вызвало ошибку на моем настольном ПК. Одна и та же ОС, одна и та же архитектура и одна и та же Visual Studio с такими же надстройками.

Итак, я проверил ссылки на WPFToolkit на моем ноутбуке, где все было в порядке. Он указал на:

C:\Program Files (x86)\WPF Toolkit\v3.5.40619.1\WPFToolkit.dll

то я проверил ссылку на своем рабочем столе, на что указал:

C:\Program Files (x86)\WPF Toolkit\v3.5.50211.1\WPFToolkit.dll

Как вы можете видеть, у меня было две разные версии WPFToolkit, установленные. Я скопировал всю папку с моего ноутбука на свой рабочий стол, изменил ссылки с версии v3.5.50211.1 на v3.5.40619.1, и проблема была решена. Больше никаких исключений. Надеюсь, это тоже поможет кому-то.

Ответ 5

У меня также была та же проблема. Поэтому я также проверил ссылку на WPFToolkit. У меня были две версии WPFToolkit, установленные (версия v3.5.50211.1), но только на моем ноутбуке это прекрасно.

Итак, я поставил более старую версию v3.5.40619.1 на моем компьютере с Windows Embedded Standard 7 и не более чем за исключением.

Итак, я пришел к выводу, что в некоторых случаях более новая версия имеет некоторые проблемы с системой запуска.

Ответ 6

Привет У меня также была такая же проблема, когда я запускаю Microsoft Test Manager с нашим WPF-приложением. Мы использовали версию WPFtoolkit v3.5.50211.1, заменив инструментарий WPF более низкой версией v3.5.40619.1, решив эту проблему.

Теперь мы можем запускать инструмент MTM и приложение WPF одновременно.

В WPFToolkit v3.5.50211.1 исправлена ​​одна ошибка, связанная с UI Automation, и я думаю, из-за этого эта проблема параллельной автоматизации возникает при использовании последней версии WPFtoolkit.