<Button Content="{Binding Type}" Name="Ellipsis" Tag="{Binding ElementName=Ellipsis, Path=DataContext}">
<Button.ContextMenu>
<ContextMenu x:Name="MainContextMenu" DataContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}">
<MenuItem Header="{Binding Type}"/>
</ContextMenu>
</Button.ContextMenu>
<Button.Triggers>
<EventTrigger SourceName="Ellipsis" RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="MainContextMenu" Storyboard.TargetProperty="(ContextMenu.IsOpen)">
<DiscreteObjectKeyFrame KeyTime="0:0:0">
<DiscreteObjectKeyFrame.Value>
<sys:Boolean>True</sys:Boolean>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
如上所示,**Button.Content="{Binding Type}"工作正常,但当它进入上下文菜单时,DataContext发生更改,导致MenuItem Header="{Binding Type}"**不起作用。我在网上进行了调查,有人建议将外部DataContext保存在标记中,并将其用作内部DataContext。我在代码中尝试过,但ContextMenu仍然无法阅读正确的DataContext。菜单项标题应该与按钮相同。在这种情况下,内容却不是。我该怎么办?
1条答案
按热度按时间pb3skfrl1#
回答问题的数据上下文部分。
一种方法是确保你的contextmenu和一个按钮有相同的datacontext,将contextmenu定义为一个资源。
因为contextmenu是在网格中示例化的,所以它继承了网格的datacontext。
如果没有代码,左键将无法工作,而不是使用按钮。
不知道为什么你想左击显示一个上下文菜单,但也许你可以考虑一个弹出而不是上下文菜单。
你可以用一个布尔动画来制作isopen的动画
或者你可以使用一个带有ischecked布尔值的togglebutton:
好的,可能需要更多的工作,但我的弹出窗口显示,并具有正确的datacontext: