Closing ContextMenu with Templated MenuItems
我创建了一个自定义的上下文菜单,在其中更改了所有项目的外观。
这些项目包含不同的控件,如组合框和按钮。现在,如果要按下按钮或选择组合框项目,我希望菜单关闭。当前菜单只是保持打开状态。
你能给我一个提示吗?
这是显示我所做的简化代码:
1 2 3 4 5 6 7 8 9 10 11 | <ContextMenu StaysOpen="False"> <MenuItem> <MenuItem.Template> <ControlTemplate> <Grid MinWidth="200"> <Button Command="{Binding SomeWorkingCommandBinding}">OK</Button> </Grid> </ControlTemplate> </MenuItem.Template> </MenuItem> </ContextMenu> |
如前所述,当我按下"确定"按钮时,我想关闭菜单。
更新
以下按钮(或任何其他控件)可以完成此任务,而无需Blend SDK:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <Button.Triggers> <EventTrigger RoutedEvent="Button.Click"> <BeginStoryboard> <Storyboard> <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(ContextMenu.IsOpen)" Storyboard.Target="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ContextMenu}}"> <DiscreteObjectKeyFrame KeyTime="0:0:0"> <DiscreteObjectKeyFrame.Value> <sys:Boolean>False</sys:Boolean> </DiscreteObjectKeyFrame.Value> </DiscreteObjectKeyFrame> </ObjectAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> </EventTrigger> </Button.Triggers> |
单击按钮后,立即使用Blend SDK的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <ContextMenu x:Name="MyContextMenu"> <MenuItem> <MenuItem.Template> <ControlTemplate> <Grid MinWidth="200"> <Button Command="{Binding SomeWorkingCommandBinding}" Content="OK"> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <ei:ChangePropertyAction TargetObject="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ContextMenu}}" PropertyName="IsOpen" Value="False"/> </i:EventTrigger> </i:Interaction.Triggers> </Button> </Grid> </ControlTemplate> </MenuItem.Template> </MenuItem> </ContextMenu> |
您将需要以下名称空间:
1 2 | xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:ei="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions" |