2010-10-25 13 views
18

Ricevo un messaggio di errore "La chiamata ricorsiva all'automazione Peer API non è valida" durante il caricamento di un datagrid con una datatemplatecolumn contenente una colonna combobox. L'errore finisce colto nel nostro codice di eccezione non gestito. Questo sembra essere un problema sul mio computer e Google non ha fornito alcuna fonte di guida per la risoluzione del problema. Il problema sembra verificarsi solo quando sto popolando le caselle combinate con i dati. Il popolamento delle caselle combinate (se non carico i dati) funziona correttamente e mentre viene visualizzato l'errore sono in grado di vedere i dati correttamente recuperati in background.Chiamata ricorsiva all'automazione Peer API non valida

Sto utilizzando un datagrid WPF in cui sto utilizzando un DataGridTemplateColumn per l'aggiunta di una casella combinata all'interno della griglia. Ho l'elenco a discesa associato a un enum utilizzando un objectdataprovider. Nel codice sottostante durante l'inizializzazione del mio schermo, utilizzo un'istruzione Linq2Sql per recuperare i dati e popolare la risorsa Item della griglia.

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

Qualsiasi e tutte le indicazioni sulla risoluzione di questo problema è apprezzato.

+1

Ho riscontrato lo stesso problema e il problema è scomparso quando ho impostato l'altezza di DataGrid. –

risposta

18

Ho aggirato il problema alla mia estremità disattivando l'automazione sul controllo della griglia. Ho scoperto che il problema era esclusivo del controllo WPF Toolkit, ma stavo riscontrando problemi nel passaggio alla versione ufficiale DataGrid 4.0 (non correlato a questa domanda)

Quindi, invece, derivano la classe dal WPFToolkit e fornisco questa sostituzione. :

protected override AutomationPeer OnCreateAutomationPeer() 
{ 
    return null; 
} 

Forse qualcuno può dirci se questa è una buona idea oppure no.

+1

Posso confermare che questa soluzione alternativa è utile. Ho notato che è importante non includere la parte "assembly = ..." nella dichiarazione dello spazio dei nomi xml se la classe della soluzione alternativa si trova nello stesso assembly del file XAML (ad esempio, l'assembly = la parte è ridondante in ogni caso). Se è presente, il compilatore si lamenterà di non trovare il tag xml, sebbene IntelliSense funzioni. – lathander

+1

Ricevo lo stesso problema ma non nel 'DataGrid', ho un' Combobox' all'interno di una 'Grid' e talvolta quando provo a fare clic per selezionare un elemento diverso dalla lista si rompe e lancia la stessa eccezione quindi credo che sia un problema di "combobox', qualcuno ha avuto qualche altra soluzione. –

+0

Mi spiace che sia un anno in ritardo @FaisalMalikyar, ma l'ho colpito anche per un ComboBox. La soluzione sembra essere la stessa: sottoclasse il ComboBox esistente, ad es. * ComboBox di classe pubblica: System.Windows.Controls.ComboBox *, aggiungi il codice come sopra alla nuova classe, quindi aggiungi il riferimento alla tua classe nel codice XAML, cioè sostituendo il ComboBox esistente con il tuo. – si618

3

Ricevo lo stesso problema: si sta utilizzando il datagrid del WPFToolkit o quello fornito con .NET 4.0. Stiamo ancora utilizzando il toolkit uno qui.

Inoltre, ho notato che questo problema non si verifica quando si utilizza l'app tramite desktop remoto.

problema simile postato qui:

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

Con una proposta di soluzione. Non ho avuto la possibilità di provarlo.

+0

Ti voterei, ma il mio rappresentante è troppo basso! – cunningdave

+0

Sto usando il Datagrid di WPFToolkit. – Ryan

3

Avevo lo stesso problema in NET 3.5 con WGrFToolkit DataGrid.

Ho associato il mio DataGrid di WPFToolkit a EntityFramework ObservableCollection, con gerarchia di entità che hanno associazioni bidirezionali (Parent < -> Elementi).

Ho risolto il problema disabilitando AutoGenerateColumns implicitamente abilitato su DataGrid e impostando manualmente le colonne.

Spero che questo aiuti.

3

Ho avuto esattamente lo stesso errore. Comunque per me è stato strano che la stessa applicazione funzionasse bene sul mio portatile e ha causato l'errore sul mio PC desktop. Lo stesso sistema operativo, la stessa architettura e lo stesso Visual Studio con gli stessi componenti aggiuntivi.

Così ho controllato i riferimenti a WPFToolkit sul mio portatile, dove tutto andava bene.E indicò:

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

Poi ho controllato di riferimento sul mio desktop, è sottolineato:

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

Come potete vedere ho avuto due diverse versioni di WPFToolkit installate. Ho copiato l'intera cartella dal mio portatile al desktop, ho cambiato i riferimenti dalla versione v.50.5211.1 alla v3.5.40619.1 e il problema è stato risolto. Non più eccezioni. Spero che questo aiuti anche qualcuno.

2

Ho anche avuto lo stesso problema. Quindi ho controllato anche il riferimento a WPFToolkit. Avevo installato due versioni di WPFToolkit (versione v3.5.50211.1), ma solo sul mio portatile funziona perfettamente.

Così ho messo la versione precedente v3.5.40619.1 sul mio PC con Windows Embedded Standard 7 e senza più eccezioni.

Quindi sono giunto alla conclusione che in alcuni casi la versione più recente ha alcuni problemi con il sistema di runing.

2

Ciao Ho anche avuto lo stesso problema quando eseguo Microsoft Test Manager con la nostra applicazione WPF. Stavamo usando la versione WPFtoolkit v3.5.50211.1, in sostituzione del toolkit WPF con la versione inferiore v3.5.40619.1 che ha risolto questo problema.

Ora siamo in grado di eseguire lo strumento MTM e l'applicazione WPF contemporaneamente.

In WPFToolkit v3.5.50211.1 è stato risolto un bug relativo all'automazione dell'interfaccia utente e, a causa di ciò, questo problema del peer di automazione è in arrivo durante l'utilizzo dell'ultimo WPFtoolkit.

Problemi correlati