2010-12-19 14 views
5

非常に奇妙な例外が発生しています。 私は例外を取得:Wpf- MenuItemをリストボックスにキャストできません。

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

私は私が得る内部例外を見てみると:

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

私が含まれているツリービューアイテムのスタイルでMenuItemに例外の原因を縮小していますこの中で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> 

例外は、MenuItemにクリックイベントハンドラがある場合にのみ発生し、クリックイベントハンドラにコードが含まれていない場合でもスローされます。

+0

うわー、それは本当に変わっています... –

+0

投稿コードはうまく機能していますので、問題は別のコードにあると思います。何がConnectionIdを設定しようとしますか? – Rachel

答えて

15

をあなたがやったと私は同じ例外が発生しました。コードを詳しく見た後、これはあなたが

になるだろうな状況のように感じている「イベント 『をクリックしてください』のスタイルでターゲットタグに を指定することはできません。代わりに EventSetterを使用してください。」

なぜここに該当しないのかわかりません。とにかく
、EventSetterを使用すると、私はこの奇妙な状況を自分自身に直面しなければならなかった

<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

私はあなたのコードをコピーしてくれています。投稿したコードが問題を引き起こしていると確信していますか?

の代わりに、のContextMenuの内容にContextMenu.Items下に巣をメニューアイテムを置く:

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

引き続き例外が発生します。もう一度、例外は、MenuItemにクリックイベントが添付されている場合にのみ発生します。 – Justin

+0

はい、イベントハンドラを添付してテストしました。あなたが投稿したxamlに何か問題があるとは思わない。それはマシン/設定の問題でなければならない。 –

+0

あなたは(どちらも)これを試してみるためにどのバージョンを使用していますか? [免責事項:私は自分自身でこれを試していない - オレンジとオレンジを比較していることを確認しようとしている。] –

2

に動作します。 これを乗り越えるには簡単な方法があります。プロジェクトをきれいにして再構築する必要があり、例外はなくなります。


これが役立ちます。

+0

私は半時間を過ごした。これは私のために働いてくれました –

+0

私はこれ以上進んでVSを閉じ、プロジェクトフォルダの 'obj'と' bin'ディレクトリを削除しなければなりませんでした。 – Brendan

+0

これは私にとってはうまくいかず、イベントセッターを使用する必要がありました。 –

0

このエラーが発生し、<MyApp:AppPage.Resources></MyApp:AppPage.Resources>の外側にタグを付けていることがわかりました。内側にある必要があることを知っていますが、終了タグがコンテキストメニュータグの前に既に呼び出されていることに気付きませんでした。私はまだその中にいると思った。私はちょうど終了タグの前に移動し、期待どおりに働いた。

関連する問題