我有一个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变得无用。
答案 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>