一、ContextMenu

如图,基本样式结构
<Style TargetType="{x:Type ContextMenu}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContextMenu}">
<Border x:Name="Border" Background="White">
<!--MenuItem 位置-->
<ItemsPresenter/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type MenuItem}">
<Border x:Name="border" VerticalAlignment="Center" Padding="25 5" Background="Transparent">
<WrapPanel>
<!--Icon 内容-->
<!--<ContentPresenter ContentSource="Icon" HorizontalAlignment="Center" VerticalAlignment="Center" />-->
<!--文字内容-->
<ContentPresenter ContentSource="Header" HorizontalAlignment="Left" VerticalAlignment="Center"/>
</WrapPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#dfdddb" TargetName="border"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
XAML 调用方式为:
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="置顶"></MenuItem>
<MenuItem Header="设为已读" />
<MenuItem Header="开启新消息提醒" />
<MenuItem Header="在独立窗口打开" />
<Separator Style="{StaticResource HorizontalSeparatorStyle}"/>
<MenuItem Header="不显聊天" />
<MenuItem Header="删除聊天" />
</ContextMenu>
</ListBox.ContextMenu>
绑定命令:
Command="{Binding cmd,Source={StaticResource dataContextProxy}}"
如果想传递附着的元素Button:
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}, Path=PlacementTarget}"
如果你想传递Button的父级元素:
CommandParameter="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}"
二、左键弹出操作菜单,并禁用右键菜单
1、在前台加入一个带菜单的Button,如下:
<Button Name="btnMenu" Width="50" Height="25" Content="菜单" Initialized="btnMenu_Initialized">
<Button.ContextMenu>
<ContextMenu Name="contextMenu">
<MenuItem Header="复制"/>
<MenuItem Header="粘贴"/>
<MenuItem Header="剪切"/>
<MenuItem Header="删除"/>
</ContextMenu>
</Button.ContextMenu>
</Button>
2、在后台,实现Initialized="btnMenu_Initialized",初始化右键菜单为null
private void btnMenu_Initialized(object sender, EventArgs e)
{
//设置右键菜单为null
this.btnMenu.ContextMenu = null;
}
3、设置单击鼠标左键弹出菜单,如下:
private void btnMenu_Click(object sender, RoutedEventArgs e)
{
//目标
this.contextMenu.PlacementTarget = this.btnMenu;
//位置
this.contextMenu.Placement = PlacementMode.Top;
//显示菜单
this.contextMenu.IsOpen = true;
}
命令绑定到ContextMenu(在ListBox中的ListBoxItem上) 不起作用解决方案
参考:https://www.codenong.com/19447795/
