ListBoxItemのコンテキストメニューが必要でした。 私はこれを作成しました:WPF:(ListBoxの)MenuItemにイベントハンドラを追加すると例外が発生する
<ListBox Name="listBoxName">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding UserName}" />
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="View" Name="MenuItemView" />
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
これは素晴らしいです。私はすべての項目のコンテキストメニューがありますが、私はこのように、メニュー項目にクリックイベントハンドラを追加したい場合:
<MenuItem Header="View" Name="MenuItemView" Click="MenuItemView_Click" />
をウィンドウが作成されたとき、私はXamlParseExceptionを取得します。
のInnerException:オブジェクトSystem.Windows.Controls.MenuItemがSystem.Windows.Controls.Grid
型に変換することができません 私は、イベントハンドラを追加する場合には、唯一の例外がスローされます。イベントメソッドは空です。
編集:のInnerExceptionの スタックトレース:\ XXX \ Chat_Client \: CでChat_Client.ChatWindow.System.Windows.Markup.IComponentConnector.Connect(のInt32 connectionId、オブジェクト対象)における
ChatWindow.xaml: で行19
MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetConnectionId( インスタンスオブジェクト、 ルート、のInt32 connectionIdオブジェクト)
Edit2: ここで、コンテキストメニューでクリックしたオブジェクトを取得する必要があります。最初に私はこれを試した:
//MenuItem s = sender as MenuItem;
//ContextMenu cm = s.Parent as ContextMenu;
//Popup pu = cm.Parent as Popup;
//object o = pu.Parent;
しかし、ポップアップの親はnullです。 次にListBoxからselectedItemを取得します。これは動作しますが、クリックされたコンテキストメニューのListBoxRowを取得する方法はありませんか?
をのInnerExceptionのスタックトレースには何ですか? – SLaks
Chat_Client.ChatWindow.System.Windows.Markup.IComponentConnector.Connect(Int32 connectionId、Object target)c:\ XXX \ Chat_Client \ ChatWindow.xaml:行19. (MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetConnectionId) (オブジェクトルート、Int32 connectionId、オブジェクトインスタンス) – user437899