2012-03-16 13 views
0

イベントハンドラにリストボックスのItemContainerStyleとしてバインドされているコンテキストメニューmenuitemを割り当てるときに問題があります。アプリケーションでリストアイテムを右クリックして呼び出すと、ヘッダー名とsystem.window.styleという別のネストされた項目を表示するコンテキストメニューが表示されます。次のようにコンテキストメニューmenuitemが正しく呼び出されていない

私のXAMLコードは次のとおりです。MenuItemの内にネスト

  <ListBox HorizontalAlignment="Left" Margin="6,90,0,0" Name="listbox1" Width="189" FontSize="14" Height="416" VerticalAlignment="Top"> 
      <ListBox.ItemContainerStyle> 
       <Style TargetType="ListBoxItem"> 
        <Setter Property="ContextMenu"> 
         <Setter.Value> 
          <ContextMenu> 
           <MenuItem Header="Delayed Kick" > 
            <Style TargetType="MenuItem"> 
             <EventSetter Event="Click" Handler="DelayedKick_Click"/> 
            </Style> 
           </MenuItem> 
          </ContextMenu> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </ListBox.ItemContainerStyle> 
     </ListBox> 

答えて

1

すべてがメニュー項目として表示されている理由である、子のMenuItemとすることができる、その項目の内容として解釈されます。

次の例は、期待通りに動作します。適切なところで、MenuItemスタイルをResources要素に配置します。

<Grid.Resources> 
    <Style TargetType="MenuItem"> 
     <EventSetter Event="Click" Handler="DelayedKick_Click"/> 
    </Style> 
</Grid.Resources> 

<ListBox.ItemContainerStyle> 
    <Style TargetType="ListBoxItem"> 
     <Setter Property="ContextMenu"> 
      <Setter.Value> 
       <ContextMenu> 
        <MenuItem Header="Delayed Kick" /> 
       </ContextMenu> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ListBox.ItemContainerStyle> 
+0

異なるコンテキストメニューのメニューアイテムに対して異なるイベントハンドラを指定する場合はどうすればよいですか? – paradox

+1

あなたは今私の知識に課税しています:(私はあなたがリソースとして複数のアイテムコンテナスタイルを持つ必要があると思います。それぞれが明示的に名前のついたMenuItemスタイルを持ちます(上記の暗黙的ではありません)。 ListBox.ItemContainerStyleSelectorを使用して、各リストボックスアイテムの正しいスタイルを選択します。 – Phil

関連する問題