WPF对Automation Peer API的递归调用无效

Rya*_*yan 20 wpf recursion automation combobox exception

当使用包含组合框列的datatemplatecolumns加载数据网格时,我收到错误消息"递归调用Automation Peer API无效".错误最终会被我们未处理的异常代码捕获.这似乎是我的机器上的一个问题,谷歌没有提供解决问题的指导来源.问题似乎只发生在我使用数据填充组合框时.填充组合框(如果我不加载数据)可以正常工作,并且在显示错误时,我能够在后台看到正确检索的数据.

我正在使用WPF数据网格,我正在使用DataGridTemplateColumn在网格中添加组合框.我使用objectdataprovider将下拉列表绑定到枚举.在初始化我的屏幕后面的代码中,我使用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>
Run Code Online (Sandbox Code Playgroud)

任何和所有关于解决这个问题的指导表示赞赏.

cun*_*ave 20

我通过关闭网格控件上的自动化来绕过我的问题.我发现问题是WPF Toolkit控件所特有的,但我在转换到4.0官方发行版DataGrid时遇到了问题(与此问题无关.)

因此,我从WPFToolkit派生类并提供此覆盖:

protected override AutomationPeer OnCreateAutomationPeer()
{
   return null;
}
Run Code Online (Sandbox Code Playgroud)

也许有人可以告诉我们这是不是一个好主意.


小智 5

我有完全一样的错误。但是,对我来说,奇怪的是,同一应用程序在我的笔记本电脑上运行正常,并在台式机上引起了错误。相同的操作系统,相同的体系结构和相同的Visual Studio,以及相同的附加组件。

因此,我在笔记本电脑上检查了对WPFToolkit的引用,一切正常。它指出:

C:\Program Files (x86)\WPF Toolkit\v3.5.40619.1\WPFToolkit.dll
Run Code Online (Sandbox Code Playgroud)

然后我在桌面上检查了引用,它指出:

C:\Program Files (x86)\WPF Toolkit\v3.5.50211.1\WPFToolkit.dll
Run Code Online (Sandbox Code Playgroud)

如您所见,我安装两个不同版本的WPFToolkit。我将整个文件夹从笔记本电脑复制到了台式机,将引用从版本v3.5.50211.1更改为v3.5.40619.1,问题得以解决。没有更多的例外。希望这也会对某人有所帮助。