2012-03-16 62 views
0

我有問題分配一個事件處理程序一個contextmenu menuitem作爲ItemContainerStyle綁定到列表框。當右鍵單擊並調用應用程序中的列表框項目時,我會看到一個顯示標題名稱的contextmenu以及另一個名爲system.window.style的嵌套項目。Contextmenu menuitem沒有正確調用

我的XAML代碼如下:

  <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

一切都嵌套在一個菜單項中被解釋爲項目的內容,這可能是孩子的MenuItems,這就是爲什麼被顯示爲菜單項。

以下示例將按預期工作。將MenuItem樣式放在適合的任何地方的資源元素中。

<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

如果我想爲不同的contextmenu菜單項指定不同的事件處理程序,該怎麼辦? – paradox 2012-03-16 09:05:39

+1

你現在正在爲我的知識徵稅(我認爲你需要將多個項目容器樣式作爲資源,每個項目都有一個不同的顯式名稱MenuItem樣式(而不是像上面那樣隱含),然後您需要使用ListBox.ItemContainerStyleSelector爲每個列表框項目選擇正確的樣式。 – Phil 2012-03-16 09:14:14

相關問題