簡體   English   中英

上下文菜單的 WPF 子菜單

[英]WPF Submenu for context menu

如果上下文菜單在 xaml 中是“硬編碼”的,那么很容易添加子菜單。 例如:

<ContextMenu>
    <MenuItem Header="Comm1" Command="{Binding Blabla1}">
        <MenuItem Header="SubComm1" Command="{Binding Blabla2}"></MenuItem>
    </MenuItem>
    <MenuItem Command="Comm2"></MenuItem>
    <MenuItem Command="Comm3"></MenuItem>
</ContextMenu>

這意味着,ContextMenu 具有三個元素(Comm1、Comm2 和 Comm3),而 Comm1 具有子菜單 SubComm1。

我使我的 ContextMenu 更加靈活:

<ContextMenu ItemsSource="{Binding ContextMenuItemsSource}">
    <ContextMenu.ItemContainerStyle>
        <Style TargetType="MenuItem">
            <Setter Property="Header" Value="{Binding ContextMenuCommandHeader}"></Setter>
            <Setter Property="Command" Value="{Binding ContextMenuCommand}"></Setter>
        </Style>
     </ContextMenu.ItemContainerStyle>
</ContextMenu>

基本上我可以在 ContextMenu 中有任意數量的元素,並且任何元素都可以有任何命令。 如何將子菜單添加到 ContextMenu 元素?

您可以將MenuItem.ItemsSource設置為嵌套集合。 這將為任何菜單項生成子菜單。 為此,支持您的 MenuItem 的模型應該包含子菜單項集合

<ContextMenu ItemsSource="{Binding ContextMenuItemsSource}">
    <ContextMenu.ItemContainerStyle>
        <Style TargetType="MenuItem">
            <Setter Property="ItemsSource" Value="{Binding ContextMenuSubItems}"></Setter>
            <Setter Property="Header" Value="{Binding ContextMenuCommandHeader}"></Setter>
            <Setter Property="Command" Value="{Binding ContextMenuCommand}"></Setter>
        </Style>
     </ContextMenu.ItemContainerStyle>
</ContextMenu>

同樣,您可以設置MenuItem.ItemContainerStyleMenuItem.ItemTemplate來設置子菜單項的樣式。

明確指定,無需綁定集合,您可以通過嵌套來添加子菜單。

MenuItem 可以在其中包含其他 MenuItem 元素作為子/子菜單,並且可以上升到多個級別。 以下代碼將三個子菜單項添加到第一個菜單項。

<MenuItem Header="_File">  
   <MenuItem Header="_Open" IsCheckable="true" />  
      <MenuItem Header="_Close" IsCheckable="true" />  
   <MenuItem Header="_Save" IsCheckable="true" />  
</MenuItem>  

來源: https : //www.c-sharpcorner.com/uploadfile/mahesh/menus-in-wpf/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM