WPF ListboxItem and ContextMenu
本文关键字:ContextMenu and ListboxItem WPF | 更新日期: 2023-09-27 18:09:55
我有这样的代码:
<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>
不幸的是它不起作用。我的上下文菜单被禁用(它正在显示,但我不能点击它,因为它被禁用)。我读到这个问题与选择问题有关,但我没有找到任何解决方案。你有什么主意吗?
您正在尝试设置命令和单击事件。你应该选择其中之一。也许这个动作被禁用是因为你设置了一个值为CanExecute = false;
的命令不写DataTemplate,你可以试着为ListBoxItem设置ItemContainerStyle,像这样:
<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>
这里我直接设置了ListBoxItem实例的ContextMenu,这样它就会在右侧控件上显示菜单。
ListBox已经有一个菜单上下文。你可以试试
<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>
您只需将命令更改为header并处理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>