WPF列表框项和上下文菜单

qf9go6mv  于 2022-12-24  发布在  其他
关注(0)|答案(3)|浏览(192)

我有这样的代码:

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

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

yqlxgs2m

yqlxgs2m1#

您正在尝试设置Command和Click事件。您应该设置其中一个。操作被禁用可能是因为您正在设置值为CanExecute = false的Command;
您可以尝试按如下方式设置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,这样它将在右侧控件上显示菜单。

sqxo8psd

sqxo8psd2#

列表框已经有一个MenuContext。您可以试试

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

jobtbby33#

您只需要将command更改为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>

相关问题