ListBox菜单问题

时间:2012-03-05 19:33:59

标签: c# wpf

private void MenuItemDelete_Click(object sender, RoutedEventArgs e) 
{             
    if (listBoxFiles.SelectedIndex == -1) 
    { 
        return; 
    } 

    //string filePath = (listBoxFiles.SelectedItem).ToString(); 
    int index = listBoxFiles.SelectedIndex; 
    listBoxFiles.Items.RemoveAt(index); 
} 

<ListBox Height="95" HorizontalAlignment="Left" Margin="78,35,0,0" Name="listBoxFiles" VerticalAlignment="Top" Width="323" Grid.ColumnSpan="2" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Visible" SelectionMode="Multiple" >
                    <ListBox.ItemContainerStyle>
                        <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">

                            <EventSetter Event="MouseDoubleClick" Handler="ListBoxItem_DoubleClick" />
                        </Style>
                    </ListBox.ItemContainerStyle>
                    <ListBox.ContextMenu>
                        <ContextMenu>
                            <MenuItem Header="Delete File" Click="MenuItemDelete_Click"></MenuItem>
                        </ContextMenu>
                    </ListBox.ContextMenu>
                </ListBox>
  1. 为什么每个按下列表框中的项目都会将其状态从选中(蓝色)更改为未选中,如果选择了文件,我按下列表框上的空白区域,文件仍保持选中状态?

  2. 我实现的功能是,如果我按下右键单击列表框中的项目并在菜单中按删除从我的列表框中删除的项目但这只发生在以前没有选择的文件时,我的意思是如果我按下列表框中的项目,然后右键单击并删除列表框中提取的文件而不删除

1 个答案:

答案 0 :(得分:1)

每当您通过左键单击选择项目,然后右键单击同一项目时,它实际上取消选择该项目。

这是设计行为,因为列表框中的SelectionMode =“Multiple”,默认为以下行为:

  • 左键单击=选择项目。
  • 右键单击=取消选择该项目。

因为右键单击取消选择该项目,所以每当您右键单击以访问上下文菜单时,将首先取消选择该项目,然后将出现上下文菜单。

然后,您不再选择某个项目,因此删除不会删除任何内容。

要解决此问题,只需设置SelectionMode =“Single”,现在右键单击将不再取消选择该项目,您的删除将按预期工作。