2010-10-25 15 views
18

Otrzymuję komunikat o błędzie "Wywołanie rekursywne do interfejsu API automatyzacji nie jest poprawne" podczas ładowania datagridu z datatemplatecolumn zawierającą kolumnę combobox. Błąd kończy się w naszym nieobsługiwanym kodzie wyjątków. To wydaje się być problemem na moim komputerze, a Google nie dostarczył żadnych wskazówek dotyczących rozwiązania tego problemu. Wydaje się, że problem występuje tylko wtedy, gdy zapełniam pola combobox danymi. Wypełnianie pól combobox (jeśli nie ładuję danych) działa poprawnie i gdy wyświetlany jest błąd, jestem w stanie zobaczyć dane poprawnie pobrane w tle.Rekursywne wywołanie WPF do interfejsu API automatyzacji nie jest poprawne

Używam datagridu WPF, w którym używam DataGridTemplateColumn do dodawania combobox wewnątrz siatki. Mam listę rozwijaną do wyliczenia przy użyciu obiektu objectdataprovider. W kodzie występującym podczas inicjowania mojego ekranu używam instrukcji Linq2Sql do pobierania danych i zapełniania zasobu Pozycja źródła siatki.

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

Wszelkie wskazówki dotyczące rozwiązania tego problemu jest doceniana.

+1

Napotkano ten sam problem i problem zniknął, gdy ustawiam wysokość DataGrid. –

Odpowiedz

18

Usunąłem problem z mojego końca, wyłączając Automatyzację na sterowaniu siatką. Zauważyłem, że problem dotyczył tylko formantu WPF Toolkit, ale miałem problemy z przejściem do oficjalnej wersji 4.0 DataGrid (niezwiązanej z tym pytaniem).

Zamiast tego, wyprowadzam klasę z pakietu WPFToolkit i dostarczam tego zastąpienia :

protected override AutomationPeer OnCreateAutomationPeer() 
{ 
    return null; 
} 

Może ktoś może nam powiedzieć, czy to dobry pomysł, czy nie.

+1

Mogę potwierdzić, że to obejście pomaga. Zauważyłem, że ważne jest, aby nie uwzględniać części "assembly = ..." w deklaracji przestrzeni nazw xml, jeśli klasa obejścia znajduje się w tym samym zespole, co plik XAML (to znaczy część assembly = i tak jest zbędna). Jeśli jest obecny, kompilator będzie skarżył się, że nie znajdzie znacznika xml, chociaż działa IntelliSense. – lathander

+1

Otrzymuję ten sam problem, ale nie ma go w 'DataGrid', mam' Combobox' wewnątrz 'Grid', a czasami kiedy próbuję kliknąć, aby wybrać inny element z listy, który łamie i zgłasza ten sam wyjątek więc myślę, że jest to problem "combobox", czy ktoś ma jakieś inne rozwiązanie. –

+0

Przepraszam, że spóźniłem się o @FaisalMalikyar, ale po prostu trafiłem w ComboBox. Rozwiązanie wydaje się być takie samo - podklasa istniejącego ComboBox, np. * Klasa publiczna ComboBox: System.Windows.Controls.ComboBox *, dodaj kod, jak powyżej, do nowej klasy, a następnie dodaj odwołanie do klasy w kodzie XAML, tj. zastąpienie istniejącego ComboBox swoim własnym. – si618

3

Otrzymuję ten sam problem - czy korzystasz z datagridu z pakietu WPFToolkit, czy też z platformy .NET 4.0. Wciąż używamy tego zestawu narzędziowego tutaj.

Ponadto zauważyłem, że ten problem nie występuje podczas korzystania z aplikacji przez zdalny pulpit.

Podobny problem napisali tutaj:

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

Z proponowanego rozwiązania. Nie miałem okazji tego wypróbować.

+0

Chciałbym zagłosować, ale mój przedstawiciel jest za niski! – cunningdave

+0

Używam WPFToolkit Datagrid. – Ryan

3

Wystąpił ten sam problem w NET 3.5 z WPFToolkit DataGrid.

Połączyłem moje dane WPFToolkit DataGrid z EntityFramework ObservableCollection, z hierarchią jednostek, które mają powiązania dwukierunkowe (Parent < -> Items).

Rozwiązałem problem, wyłączając niejawnie włączone AutoGenerateColumns w DataGrid i ręcznie ustawiając kolumny.

Mam nadzieję, że to pomoże.

3

Miałem dokładnie ten sam błąd. Jednak dla mnie to dziwne, że ta sama aplikacja działa dobrze na moim laptopie i spowodowała błąd na moim komputerze stacjonarnym. Ten sam system operacyjny, ta sama architektura i to samo Visual Studio z tymi samymi dodatkami.

Sprawdziłem więc odniesienia do WPFToolkit na moim laptopie, gdzie wszystko było w porządku.To wskazał:

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

następnie sprawdziłem odniesienia na pulpicie, to wskazał:

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

Jak widać miałem dwie różne wersje WPFToolkit zainstalowany. Skopiowałem cały folder z mojego laptopa na mój pulpit, zmieniono odniesienia z wersji v.5.50211.1 do wersji 3.5.40619.1 i problem został rozwiązany. Nigdy więcej wyjątków. Mam nadzieję, że to też pomoże komuś.

2

Też miałem ten sam problem. Sprawdziłem więc także odniesienie do WPFToolkit. Miałem zainstalowane dwie wersje WPFToolkit (wersja v.5.50211.1), ale tylko na moim laptopie działa dobrze.

Dlatego umieszczam starszą wersję v3.5.40619.1 na moim komputerze z systemem Windows Embedded Standard 7 i bez wyjątków.

Doszedłem do wniosku, że w niektórych przypadkach nowsza wersja ma pewne problemy z uruchomionym systemem.

2

Witam Miałem ten sam problem, gdy korzystam z Microsoft Test Manager z naszą aplikacją WPF. Używaliśmy wersji WPFtoolkit v3.5.50211.1, zastępując pakiet narzędzi WPF wersją niższą v3.5.40619.1 rozwiązał ten problem.

Teraz jesteśmy w stanie uruchomić jednocześnie narzędzie MTM i aplikację WPF.

W pakiecie WPFToolkit v3.5.50211.1 naprawiono jeden błąd związany z automatyzacją interfejsu użytkownika i wydaje mi się, że ten problem z automatyzacją nadchodzi podczas korzystania z najnowszej wtyczki WPFtoolkit.

Powiązane problemy