菜单项内的按钮不会打开子菜单项

问题描述 投票:0回答:2

我在

Button
里面有一个
MenuItem.Header
,如下所示:

<Menu>
    <MenuItem>
        <MenuItem.Header>
            <Button>Hello</Button>
        </MenuItem.Header>
        <MenuItem Header="SubItem1"/>
        <MenuItem Header="SubItem2"/>
    </MenuItem>
</Menu>

如果我单击

MenuItem
outside
Button
,则会打开子菜单。但如果我点击
Button
子菜单将不会打开。我相信这是因为点击的事件没有传递给
MenuItem
。我如何解决它?

简而言之 - 我希望在单击

Button
时打开子菜单。

(用途主要是为了样式目的,我有一个按钮样式,我想把它用作

MenuItem

wpf button menuitem routedevent
2个回答
2
投票

A

Button
不知道如何扩展
MenuItem
除非你通过编写一些代码来告诉它如何扩展:

<Menu>
    <MenuItem>
        <MenuItem.Header>
            <Button Click="Button_Click">Hello</Button>
        </MenuItem.Header>
        <MenuItem Header="SubItem1"/>
        <MenuItem Header="SubItem2"/>
    </MenuItem>
</Menu>

private void Button_Click(object sender, RoutedEventArgs e)
{
    Button btn = (Button)sender;
    MenuItem mi = btn.Parent as MenuItem;
    if (mi != null)
        mi.IsSubmenuOpen = !mi.IsSubmenuOpen;
}

0
投票

这是我的解决方案(我已激活 MaterialDesignInXAML,因此它看起来不同,但实际上是相同的)。

我按照与您的示例相反的方式进行了操作:创建一个与菜单分离的按钮并隐藏菜单本身。


<StackPanel Orientation="Horizontal">
    <Menu>
        <!-- Set width=0 to hide the menu -->
        <MenuItem Width="0" x:Name="myMenu">
            <MenuItem Header="Settings"/>
            <MenuItem Header="Exit"/>
        </MenuItem>
    </Menu>
    <Button Content="Try me">
        <b:Interaction.Triggers>
            <b:EventTrigger EventName="Click">
                <b:ChangePropertyAction TargetObject="{Binding ElementName=myMenu}" PropertyName="IsSubmenuOpen" Value="True"/>
            </b:EventTrigger>
        </b:Interaction.Triggers>
    </Button>
</StackPanel>

© www.soinside.com 2019 - 2024. All rights reserved.