WPF Рекурсивный вызов Automation Peer API недопустим - PullRequest
19 голосов
/ 25 октября 2010

Я получаю сообщение об ошибке «Недопустимый рекурсивный вызов API-интерфейса Automation Peer» при загрузке таблицы данных со столбцом данных dateate Ошибка оказывается в нашем необработанном коде исключения. Похоже, это проблема моей машины, и Google не предоставил никаких рекомендаций по ее решению. Эта проблема возникает только тогда, когда я заполняю комбинированные списки данными. Заполнение поля со списком (если я не загружаю данные) работает правильно, и пока отображается ошибка, я могу видеть данные, правильно извлеченные в фоновом режиме.

Я использую сетку данных WPF, где я использую DataGridTemplateColumn для добавления комбинированного списка внутри сетки. У меня есть выпадающий список, связанный с перечислением с помощью objectdataprovider. В приведенном ниже коде при инициализации моего экрана я использую оператор Linq2Sql для извлечения данных и заполнения источника данных сетки.

<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>

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

Ответы [ 7 ]

20 голосов
/ 03 ноября 2010

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

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

protected override AutomationPeer OnCreateAutomationPeer()
{
   return null;
}

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

4 голосов
/ 08 апреля 2014

У меня была точно такая же ошибка.Однако для меня было странным, что это же приложение прекрасно работало на моем ноутбуке и вызывало ошибку на моем настольном ПК.Та же ОС, та же архитектура и та же 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, и проблема была решена.Нет больше исключений.Надеюсь, это кому-то тоже поможет.

4 голосов
/ 29 ноября 2011

У меня возникла та же проблема в NET 3.5 с WPFToolkit DataGrid.

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

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

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

3 голосов
/ 03 ноября 2010

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

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

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

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

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

2 голосов
/ 29 октября 2015

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

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

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

2 голосов
/ 23 мая 2014

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

Поэтому я установил более старую версию v3.5.40619.1 мой ПК с Windows Embedded Standard 7 и больше никаких исключений.

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

0 голосов
/ 01 июня 2019

Мне удалось решить эту проблему, заменив DataGrid и ComboBox в файле XAML WPF следующими двумя производными классами, которые оба переопределяют метод OnCreateAutomationPeer ().

public class SafeDataGrid : DataGrid
{
    protected override AutomationPeer OnCreateAutomationPeer()
    {
        return null;
    }
}

public class SafeComboBox : ComboBox
{
    protected override AutomationPeer OnCreateAutomationPeer()
    {
        return null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...