2011-07-04 14 views
1

私は、以下の方法でのContextMenuを定義している:WPF:サブメニューでMenuItemのContextMenuを取得するにはどうすればよいですか?

<ContextMenu> 
    <MenuItem Header="Add to"> 
     <MenuItem Header="Test1" Click="ItemClicked" /> 
     <MenuItem Header="Test2" Click="ItemClicked" /> 
    </MenuItem> 
    <MenuItem Header="Remove from All" /> 
</ContextMenu> 

しかしItemClicked機能にどのように私は親のContextMenuへの参照を得るでしょう?最初のレベルの項目について

(例えば「すべてから削除」)私は、次のような何かを行うことができます。

var mi = sender as MenuItem; 
if (mi != null) 
{ 
    var cm = mi.Parent as ContextMenu; 
    if (cm != null) 
    { 
     var lb = cm.PlacementTarget as ListBox; 
     if (lb != null) 
     { 
      // Do Stuff 
     } 
    } 
} 

しかし、彼らの親がnullであるので、これはサブメニューのMenuItemのために動作しません...

答えて

1

は、これは残念ながら、nullを返し親要素

LogicalTreeHelper.GetParent(e.Source as DependencyObject); 
+0

を返しますLogicalTreeHelper.GetParent()を使用してみてください。 e.Sourceまたは送信側のいずれかで呼び出されたとき。 – mutex

+0

ああ、実際には私が与えた簡略化した例ではうまくいきます!私の実際のケースでは、これはDataTemplatesの2つのレベルにすべてネストされているので、何かを混乱させるようです。実際には単純化した例で私は(送信者はMenuItemとして).Parentが正しく設定されているので...私は正しく私の問題を再現していないようだ! – mutex

関連する問題