2010-10-25 28 views
18

Recibo un mensaje de error "Recursive call to Automation Peer API is not valid" al cargar una cuadrícula de datos con una columna de columna de datos que contiene una columna de combobox. El error termina atrapado en nuestro código de excepción no controlada. Esto parece ser un problema en mi máquina, y Google no ha proporcionado ninguna fuente de orientación para resolver el problema. El problema parece ocurrir solo cuando estoy poblando los cuadros combinados con datos. Llenar los cuadros combinados (si no cargué datos) funciona correctamente, y mientras se muestra el error, puedo ver los datos recuperados correctamente en el fondo.WPF Llamada recursiva a Automation Peer API no es válida

Estoy usando una cuadrícula de datos WPF donde estoy usando una DataGridTemplateColumn para agregar un combobox dentro de la grilla. Tengo la lista desplegable vinculada a una enumeración utilizando un proveedor de datos de objeto. En el código que se encuentra detrás de la inicialización de mi pantalla, uso una instrucción Linq2Sql para recuperar datos y completar la fuente Items de la grilla.

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

Cualquier y toda la orientación en la solución de este problema es apreciado.

+1

Me encontré con el mismo problema y el problema desapareció cuando configuré la altura del DataGrid. –

Respuesta

18

He pasado por alto el problema por mi parte desactivando la automatización en el control de la cuadrícula. Descubrí que el problema era exclusivo del control WPF Toolkit, pero estaba teniendo problemas para pasar al release oficial DataGrid 4.0 (no relacionado con esta pregunta)

Por lo tanto, obtengo la clase del WPFToolkit y proporciono esta anulación :

protected override AutomationPeer OnCreateAutomationPeer() 
{ 
    return null; 
} 

Tal vez alguien nos puede decir si esta es una buena idea o no.

+1

Puedo confirmar que esta solución ayuda. Noté que es importante no incluir la parte "assembly = ..." en la declaración del espacio de nombres xml si la clase de solución temporal está ubicada en el mismo ensamblaje que el archivo XAML (es decir, el ensamblado = parte es redundante de todos modos). Si está presente, el compilador se quejará de no encontrar la etiqueta xml, aunque IntelliSense funciona. – lathander

+1

Me sale el mismo problema pero no está en 'DataGrid', tengo' Combobox' dentro de 'Grid' y, a veces, cuando intento hacer clic para seleccionar un elemento diferente de la lista, se rompe y arroja la misma excepción así que supongo que es un problema de "combobox", alguien tiene otra solución. –

+0

Lo siento, es un año más tarde @FaisalMalikyar, pero también pegué esto por un ComboBox. La solución parece ser la misma: subclase del ComboBox existente, p. * ComboBox de clase pública: System.Windows.Controls.ComboBox *, agregue el código anterior a la nueva clase, luego agregue una referencia a su clase en el código XAML, es decir, reemplazando el ComboBox existente por el suyo. – si618

3

Tengo el mismo problema: ¿está utilizando la cuadrícula de datos del WPFToolkit, o la que se envía con .NET 4.0. Todavía estamos usando el kit de herramientas aquí.

Además, he notado que este problema no se produce al utilizar la aplicación a través del escritorio remoto.

problema similar publicado aquí:

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

Con una propuesta de solución. No he tenido la oportunidad de probarlo.

+0

¡Yo te votaría, pero mi representante es muy bajo! – cunningdave

+0

Estoy usando WPFToolkit Datagrid. – Ryan

3

Estaba obteniendo el mismo problema en NET 3.5 con WPFToolkit DataGrid.

He enlazado mi WPFToolkit DataGrid con EntityFramework ObservableCollection, con una jerarquía de entidades que tienen asociaciones bidireccionales (Parent < -> Items).

He resuelto el problema al deshabilitar AutoGenerateColumns habilitado implícitamente en DataGrid y al configurar manualmente las columnas.

Espero que esto ayude.

3

Tuve exactamente el mismo error. Sin embargo, para mí fue extraño que la misma aplicación funcionase bien en mi computadora portátil y causó el error en mi PC de escritorio. El mismo sistema operativo, la misma arquitectura y el mismo Visual Studio con los mismos complementos.

Así que verifiqué las referencias a WPFToolkit en mi computadora portátil, donde todo estaba bien.Se señaló que:

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

entonces comprueba referencia en mi escritorio, se señaló:

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

Como se puede ver que tenía dos versiones diferentes de WPFToolkit instalados. Copié toda la carpeta de mi computadora portátil a mi escritorio, cambié las referencias de la versión v3.5.50211.1 a v3.5.40619.1 y el problema se resolvió. No más excepciones. Espero que esto ayude a alguien también.

2

También tuve el mismo problema. Así que también verifiqué la referencia al WPFToolkit. Tenía dos versiones iguales de WPFToolkit instalado (Versión v3.5.50211.1), pero solo en mi computadora portátil funciona bien.

Así que puse la versión anterior v3.5.40619.1 en mi PC con Windows Embedded Standard 7 y no más excepciones.

Así que llegué a la conclusión de que en algunos casos la versión más nueva tiene algunos problemas con el sistema de runing.

2

Hola También tuve el mismo problema cuando estoy ejecutando Microsoft Test Manager con nuestra aplicación WPF. Estábamos utilizando la versión de WPFtoolkit v3.5.50211.1, reemplazando el kit de herramientas WPF con la versión más baja v3.5.40619.1 ha resuelto este problema.

Ahora podemos ejecutar la herramienta MTM y la aplicación WPF simultáneamente.

En WPFToolkit v3.5.50211.1 se corrigió un error relacionado con la Automatización de la interfaz de usuario y supongo que debido a esto, este problema de automatización de igual viene mientras se utiliza el último WPFtoolkit.

Cuestiones relacionadas