Reputation: 2892
I have code like this:
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical"
ContextMenuService.ShowOnDisabled="True">
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Command="Delete" Click="DeleteEvent">
</MenuItem>
</ContextMenu>
</StackPanel.ContextMenu>
<TextBlock Text="{Binding EventName}">
</TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
Unfortunately It doesn't work. My context menu is disabled (it is displaying but I cannot click it because it's disabled). I've read that this problem is related to selection problem but I didn't find any solution for that. Do you have any ideas?
Upvotes: 9
Views: 17630
Reputation: 7700
You are trying to set Command and the Click event. You should set one or the other. Maybe the fact the action is disabled is because you are setting a Command with a value of CanExecute = false;
Instead of writing a DataTemplate, you can try to set the ItemContainerStyle for the ListBoxItem like this:
<ListBox>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="Delete" Click="DeleteEvent"/>
</ContextMenu>
</Setter.Value>
</Setter>
<Setter Property="Content" Value="{Binding Path=EventName}"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
Here I directly set the ContextMenu of the ListBoxItem instance so it will display the menu on the right control.
Upvotes: 14
Reputation: 1034
ListBox already have a MenuContext. You can try it
<ListBox x:Name="MyistBox">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Update"/>
<MenuItem Header="Delete"/>
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>
Upvotes: 3
Reputation: 614
You just need to change command to header and handle DeleteEvent
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical"
ContextMenuService.ShowOnDisabled="True">
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete" Click="DeleteEvent">
</MenuItem>
</ContextMenu>
</StackPanel.ContextMenu>
<TextBlock Text="{Binding EventName}">
</TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
Upvotes: 0