在ListBox的(Context)MenuItem上单击事件(XamlParseException)

时间:2013-12-21 22:40:44

标签: c# wpf listbox

我有一个ListBox,其中有多个ListBoxItem对象。当用户右键单击ListBoxItem时,ContextMenu应该与一些MenuItem对象一起出现。我遇到的问题是,当我在MenuItem对象上放置一个Click事件时,我得到一个XamlParseException,说明以下内容:

  

PresentationFramework.dll中出现'System.Windows.Markup.XamlParseException'类型的第一次机会异常

     

其他信息:'设置connectionId引发异常。'行号“31”和行>位置“34”。

我必须承认,我并不完全了解WPF的样式和资源以及其他方面。当我设计这个时,我只是从互联网上复制了我的代码。代码如下:

<ListBox Grid.Column="1" Grid.Row="1" MouseDoubleClick="MainListBox_MouseDoubleClick" Name="mainListBox" SelectionChanged="MainListBox_SelectionChanged">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="ContextMenu">
                <Setter.Value>
                    <ContextMenu>
                        <MenuItem Click="OpenMenuItem_Click" Header="Open"/>
                        <Separator/>
                        <MenuItem Header="Cut"/>
                        <MenuItem Header="Copy"/>
                        <Separator/>
                        <MenuItem Header="Delete"/>
                        <MenuItem Header="Rename"/>
                    </ContextMenu>
                </Setter.Value>
            </Setter>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

当我删除Click事件时它会起作用,但当然ContextMenu变得无用。

1 个答案:

答案 0 :(得分:2)

为ListBoxItem分配ContextMenu,如下所示。

   <ListBox Grid.Column="1" Grid.Row="1"  MouseDoubleClick="MainListBox_MouseDoubleClick" Name="mainListBox" SelectionChanged="MainListBox_SelectionChanged">
        <ListBox.Resources>
            <ContextMenu x:Key="CMenu">
                <MenuItem Click="OpenMenuItem_Click" Header="Open"/>
                <Separator/>
                <MenuItem Header="Cut"/>
                <MenuItem Header="Copy"/>
                <Separator/>
                <MenuItem Header="Delete"/>
                <MenuItem Header="Rename"/>
            </ContextMenu>
        </ListBox.Resources>            
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="ContextMenu" Value="{StaticResource CMenu}"/>      
            </Style>
        </ListBox.ItemContainerStyle>
        <ListBoxItem Content="Test1"/>
    </ListBox>