WPF ContextMenu


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM