如何仅激活列表框中的项目的上下文菜单?
以下内容将在整个列表框中调用上下文菜单:
<ListBox Name="lBoxTest">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Name="btnTest" Header="Test" Click="btnTest_Click"/>
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>
答案 0 :(得分:1)
您可以使用ItemsContainerStyle:
<ListBox>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Name="btnTest" Header="Test" />
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
答案 1 :(得分:1)
通常的方法是以项目容器样式设置上下文菜单。
<ListBox Name="lBoxTest">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Name="btnTest"
Header="Test"
Click="btnTest_Click"/>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
但是,由于bug in WPF with code-behind,这可能不起作用。由于将事件处理程序设置为setter值而发生。您可以通过为上下文菜单声明一个单独的资源并使用StaticResource
进行引用来缓解此问题。
<ListBox Name="lBoxTest">
<ListBox.Resources>
<ContextMenu x:Key="ContextMenu">
<MenuItem Name="btnTest"
Header="Test"
Click="MenuItem_OnClick"/>
</ContextMenu>
</ListBox.Resources>
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="ContextMenu"
Value="{StaticResource ContextMenu}"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>