C #: Контекстное меню Listbox для Listboxitems (WPF)

Я хочу для своего списка в WPF контекстное меню. Я сделал это с помощью контекстного меню для всего списка, но вы можете щелкнуть мышью, чтобы открыть контекстное меню, даже если вы не щелкаете элемент.

Я кое-что нашел в гугле, но не вышло.

Я пробовал что-то вроде этого:

<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>

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

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

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

Но это тоже не сработало.

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

Спасибо


person user437899    schedule 11.12.2010    source источник
comment
Что именно не работает? Вам нужно быть более конкретным ... Вы проверяли окно вывода в VS на наличие ошибок привязки?   -  person Thomas Levesque    schedule 12.12.2010


Ответы (1)


Я бы установил 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>
person Thomas Levesque    schedule 12.12.2010
comment
@Thomas, я привязываю команду к RelayCommand в MenuItem, но RalayCommand никогда не вызывается. - person SubmarineX; 18.11.2013
comment
@SubmarineX, вы видите какие-либо ошибки привязки в окне вывода? Если вы видите что-то вроде «Не могу найти управляющий FrameworkElement ...», взгляните на это решение - person Thomas Levesque; 18.11.2013
comment
@ThomasLevesque, спасибо, теперь он у меня есть. Поскольку текст данных ListBoxItem не является контекстом данных ListBox, поэтому я привязываю команду к тексту данных ListBoxItem, а затем через мессенджер уведомляю о тексте данных списка. И позже я увижу ваше решение. - person SubmarineX; 18.11.2013