对自动化对等API的WPF递归调用无效

bweufnob  于 2023-06-24  发布在  其他
关注(0)|答案(8)|浏览(109)

我收到错误消息
“对自动化对等API的递归调用无效”

  • 当用包含combobox列的datatemplatecolumn加载datagrid时。错误最终被我们未处理的异常代码捕获。这似乎是我机器上的一个问题,谷歌没有提供解决这个问题的指导来源。该问题似乎仅在使用数据填充comboboxes时发生。
  • 填充组合框(如果我不加载数据)可以正常工作,当错误显示时,我可以在后台看到正确检索的数据。
  • 我使用的是WPF datagrid,我使用DataGridTemplateColumngrid中添加combobox。我使用objectdataprovider将下拉列表绑定到enum
  • 在后面的代码中,当初始化屏幕时,我使用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>
</grid:DataGridTemplateColumn>
<grid:DataGrid.Columns>

对于解决这个问题的任何和所有指导都是赞赏的。

0ve6wy6x

0ve6wy6x1#

我已经通过关闭电网控制的自动化来绕过我这边的问题。我发现这个问题是WPF Toolkit控件所特有的,但是我在转换到4.0正式发布的DataGrid时遇到了问题(与这个问题无关)
因此,我从WPFToolkit派生该类并提供此覆盖:

protected override AutomationPeer OnCreateAutomationPeer()
{
   return null;
}

也许有人能告诉我们这是不是个好主意。

xxe27gdn

xxe27gdn2#

我也犯了同样的错误。然而,对我来说,奇怪的是,相同的应用程序在我的笔记本电脑上工作正常,并导致了我的桌面PC上的错误。同样的操作系统,同样的架构,同样的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,问题得到解决。不再有例外。希望这也能帮助到某人。

okxuctiv

okxuctiv3#

我在NET 3.5中使用WPFToolkit DataGrid也遇到了同样的问题。
我已经将我的WPFToolkit DataGrid绑定到EntityFramework ObservableCollection,其中实体的层次结构具有双向关联(父<->项)。
我通过在DataGrid上禁用隐式启用的AutoGenerateColumns并手动设置列来解决这个问题。
希望这能帮上忙。

drnojrws

drnojrws4#

我也遇到了同样的问题--您是使用WPFToolkit的datagrid还是.NET 4.0附带的datagrid。我们仍然在使用工具包。
此外,我注意到,通过远程桌面使用应用程序时不会出现这个问题。
类似的问题贴在这里:
http://wpf.codeplex.com/workitem/14443
提出了解决方案。还没机会试呢。

6yoyoihd

6yoyoihd5#

我也有同样的问题。所以我也检查了WPFToolkit的引用。我安装了两个相同版本的WPFToolkit(版本v3. 5. 50211. 1),但只有在我的笔记本电脑上才能正常工作。
所以我把旧版本v3.5.40619.1放在我的Windows Embedded Standard 7 PC上,没有更多的例外。
所以我得出的结论是,在某些情况下,较新的版本有一些问题的运行系统。

13z8s7eq

13z8s7eq6#

嗨,我也有同样的问题,当我运行微软测试管理器与我们的WPF应用程序。我们使用的是WPF toolkit版本v3.5.50211.1,用较低版本v3.5.40619.1替换WPF toolkit解决了这个问题。
现在我们可以同时运行MTM工具和WPF应用程序了。
在WPFToolkit v3.5.50211.1中,修复了一个与UI自动化相关的bug,我猜是因为这个问题,在使用最新的WPFToolkit时会出现这个自动化对等问题。

hl0ma9xz

hl0ma9xz7#

我能够通过将WPFXAML文件中的DataGrid和ComboBox替换为以下两个派生类来解决这个问题,这两个派生类都覆盖了OnCreateAutomationPeer()方法。

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

public class SafeComboBox : ComboBox
{
    protected override AutomationPeer OnCreateAutomationPeer()
    {
        return null;
    }
}
qnakjoqk

qnakjoqk8#

我在一个旧的解决方案中遇到了同样的问题(虽然它在我的本地开发计算机上运行良好,但在测试系统上失败(使用WPFToolkit 3.5.50211.1)
原来我的本地开发计算机有一个较旧的WPFToolkit:3.5.40128.1
然而,我做了更多的检查,并意识到只有当DataGrid是Microsoft.Windows.Controls.DataGrid(即WPFToolkit)时才会出现问题,并且它包含来自System.Windows.Controls命名空间的控件(在本例中为ComboBox)-以及来自.Net PresentationFramework.dll)
我们已经将解决方案从.Net 4.5.1 ->更新到.Net 4.7.1,这意味着PresentationFramework.dll的新版本,但WPFToolkit dll没有更改。
决定修复此问题的最佳方法是删除WPFToolkit.dll引用,并将Microsoft.Windows.Controls.DataGrid中的所有DataGrids更新为较新的System. Windows. Controls. Datagrid。

相关问题