2010-12-19 9 views
5

Ich bekomme eine sehr seltsame Ausnahme. bekomme ich die Ausnahme:Wpf - MenuItem kann nicht in Listbox umgewandelt werden?

"'Set connectionId threw an exception.' Line number '26' and line position '34'."

Wenn ich auf der inneren Ausnahme sehe ich erhalten:

"Unable to cast object of type 'System.Windows.Controls.MenuItem' to type 'System.Windows.Controls.ListBox'."

ich die Ursache für die Ausnahme in dem enthaltenen TreeViewItem Stil auf die MenuItem verengte in dieser TreeView:

<TreeView x:Name="ProjectElementTreeView" ItemsSource="{Binding ProjectElementCollection}" DisplayMemberPath="Name" Padding="0" SelectedItemChanged="ProjectElementTreeView_SelectedItemChanged" GotKeyboardFocus="ProjectElementTreeView_GotKeyboardFocus"> 
     <TreeView.Resources> 
      <Style TargetType="{x:Type TreeViewItem}"> 
       <Setter Property="HorizontalAlignment" Value="Left" /> 
       <Setter Property="ContextMenu"> 
        <Setter.Value> 
         <ContextMenu> 
          <MenuItem Name="AddProjectElementMenuItem" Header="Add" Click="AddProjectElementMenuItem_Click"/> 
         </ContextMenu> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </TreeView.Resources> 
    </TreeView> 

Die Ausnahme tritt nur auf, wenn MenuItem über einen Click-Ereignishandler verfügt und selbst dann ausgelöst wird, wenn der Click-Ereignishandler keinen Code enthält.

+0

wow, das ist * wirklich * komisch ... –

+0

Der Code geschrieben funktionierte gut für mich, so denke ich, Ihr Problem ist in einem anderen Stück Code. Was versucht die ConnectionId zu setzen? – Rachel

Antwort

15

bekam ich die gleiche Ausnahme wie Sie. Nach einem Blick den Code näher an, fühlt sich dies wie eine Situation, wo Sie

„Die Veranstaltung‚Click‘kann nicht stattdessen in einem Style auf einem Ziel-Tag angegeben werden. Verwenden Sie einen Eventsetter.“ Bekommen würde

Ich bin mir nicht sicher, warum das hier nicht gilt.
Wie auch immer, ein Eventsetter mit arbeitet

<Setter Property="ContextMenu"> 
    <Setter.Value> 
     <ContextMenu> 
      <MenuItem Name="AddProjectElementMenuItem" Header="Add"> 
       <MenuItem.Style> 
        <Style TargetType="MenuItem"> 
         <EventSetter Event="Click" Handler="AddProjectElementMenuItem_Click"/> 
        </Style> 
       </MenuItem.Style> 
      </MenuItem> 
     </ContextMenu> 
    </Setter.Value> 
</Setter> 
0

Ich habe Ihren Code kopiert und es funktioniert für mich. Sind Sie sicher, dass der von Ihnen gepostete Code das Problem verursacht?

Statt die MenuItem in den Inhalt der ContextMenu des Vergebens, nisten unter ContextMenu.Items:

<ListBox.ContextMenu> 
    <ContextMenu> 
     <ContextMenu.Items> 
      <MenuItem Name="AddProjectElementMenuItem"></MenuItem> 
     </ContextMenu.Items> 
    </ContextMenu> 
</ListBox.ContextMenu>a 
+0

verursacht immer noch die Ausnahme. Die Ausnahme tritt erneut auf, wenn das MenuItem ein angefügtes Klick-Ereignis hat. – Justin

+0

Ja, ich habe es mit dem angehängten Event-Handler getestet. Ich glaube nicht, dass mit dem von Ihnen geposteten XAML etwas falsch ist - es muss ein Maschinen-/Konfigurationsproblem sein. –

+0

Welche Versionen verwenden Sie (beide), um dies zu versuchen? [Disclaimer: Ich habe das nicht selbst ausprobiert - nur um sicher zu gehen, dass du Orangen mit Orangen vergleichst.] –

2

ich mir diese seltsame Situation konfrontiert hatte. Es gibt einen einfachen Weg, um darüber hinwegzukommen, Sie müssen das Projekt reinigen und neu aufbauen und die Ausnahme wird verschwinden.


Hoffe, das hilft.

+0

Hölle, ja, ich habe eine halbe Stunde damit verbracht. Dies wurde für mich dank –

+0

gearbeitet Ich musste einen weiter gehen und VS schließen und löschen Sie die 'obj' und die' bin' Verzeichnisse im Projektordner. – Brendan

+0

Nichts davon funktionierte für mich, musste den Event Setter verwenden. –

0

Ich lief in diesen Fehler und fand heraus, dass ich das Tagging außerhalb <MyApp:AppPage.Resources></MyApp:AppPage.Resources>, ich meine, ich weiß, es muss drin sein, aber ich habe nicht bemerkt, dass das schließende Tag bereits vor meinem Kontextmenü-Tag aufgerufen wurde. Ich dachte, ich wäre noch drinnen. Ich habe es nur vor dem schließenden Tag verschoben und es hat wie erwartet funktioniert.

Verwandte Themen