wpf 菜单项内的按钮无法打开子菜单项

fykwrbwg  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(152)

我在MenuItem.Header中有一个Button,如下所示:

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

如果我单击Button * 外部 * 的MenuItem,子菜单打开。但是如果我点击Button子菜单将不会打开。我相信这是因为点击事件没有传递给MenuItem。我该怎么修复它?
简而言之-我希望子菜单打开时,单击Button
(The使用主要是为了造型的目的,我有一个按钮的风格,我想用它作为一个MenuItem

ltqd579y

ltqd579y1#

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;
}
cclgggtu

cclgggtu2#

这是我的解决方案(我激活了 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>

相关问题