我在
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
)
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;
}
这是我的解决方案(我已激活 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>