一、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/
