我有这样的代码:

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

不幸的是它不起作用。我的上下文菜单被禁用(它正在显示但我无法单击它,因为它被禁用)。我读过这个问题与选择问题有关,但我没有找到任何解决方案。你有什么想法?

最佳答案

首先,奇怪的是您正在尝试设置 Command 和 Click 事件。您应该设置其中之一。也许该操作被禁用的事实是因为您正在设置一个值为 CanExecute = false 的命令;

您可以尝试为 ListBoxItem 设置 ItemContainerStyle,而不是编写 DataTemplate,如下所示:

<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,这样它就会在右侧控件上显示菜单。

关于c# - WPF ListboxItem 和 ContextMenu,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7554184/

10-11 05:59