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