2010-12-11 5 views
6

Я хочу для своего списка в WPF контекстное меню. Я сделал это с контекстным меню для всего списка, но вы можете richt-click, чтобы получить контекстное меню, даже если вы не нажимаете на элемент.C#: Listbox Contextmenu для Listboxitems (WPF)

Я нашел что-то в Google, но это не сработало.

Я пытался что-то вроде этого:

<ListBox Margin="5" ItemsSource="{Binding}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}"> 
       <TextBlock.ContextMenu> 
        <ContextMenu> 
         <MenuItem Header="{Binding Name}" Click="MenuItemName_Click"/> 
         <MenuItem Header="{Binding Capital}" Click="MenuItemCapital_Click"/> 
         <MenuItem Header="{Binding Population}" Click="MenuItemPopulation_Click"/> 
        </ContextMenu> 
       </TextBlock.ContextMenu> 
      </TextBlock> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Я попробовал его с TextBlock, как в примере, с другими элементами, как и в других учебных пособиях, я устал без и много других вещей: но ничего не получалось. Нет ContextMenu для моих ListBox элементов :(

позже я пытался что-то вроде этого:

<ListBox.ItemTemplate> 
    <DataTemplate> 
     <ListBoxItem> 
      <ListBoxItem.ContextMenu> 
       <ContextMenu> 
        <MenuItem/> 
       </ContextMenu> 
      </ListBoxItem.ContextMenu> 
     </ListBoxItem> 
    </DataTemplate> 
</ListBox.ItemTemplate> 

Но это не сработало слишком

Может кто-нибудь дать мне подсказку/рабочий пример :).

спасибо

+0

Что именно не работает? Вы должны быть более конкретными ... Вы проверили окно вывода в VS для ошибок привязки? –

ответ

13

я установил бы ContextMenu в стиле в ListBoxItem «с, а не в DataTemplate:

<ListBox Name="simpleListBox" 
     ItemsSource="{Binding SimpleList}" 
     DisplayMemberPath="Name"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="ContextMenu"> 
       <Setter.Value> 
        <ContextMenu> 
         ... 
        </ContextMenu> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 
+0

@Thomas, я привязываю команду с RelayCommand в MenuItem, но RalayCommand никогда не называется. – SubmarineX

+0

@SubmarineX, вы можете увидеть какие-либо ошибки привязки в окне вывода? Если вы видите нечто вроде «Не можете найти управляющий элемент FrameworkElement ...», посмотрите [это решение] (http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to- data-when-the-datacontext-is-not-inherited /) –

+0

@ThomasLevesque спасибо, теперь у меня это есть. Поскольку datacontext из ListBoxItem не является datacontext из ListBox, поэтому я привязываю команду к datacontext ListBoxItem, а затем через messager уведомляет о datacontext списка. И позже я увижу ваше решение. – SubmarineX

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