2012-03-16 6 views
0

У меня возникла проблема с назначением обработчика события контекстного меню, связанного как ItemContainerStyle для списка. При щелчке правой кнопкой мыши и вызове элемента списка в приложении я получаю контекстное меню, в котором отображается имя заголовка, а также другой вложенный элемент, называемый 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

Все вложенные в MenuItem интерпретируется как содержание этого элемента, который может быть ребенок MenuItems, поэтому в настоящее время отображается как пункт меню.

Следующий пример будет работать так, как вы ожидаете. Поместите стиль 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

Смежные вопросы