如何在选择其中一个MenuItem时关闭包含Menu的Popup(DataGridCell)

时间:2013-10-15 16:51:53

标签: wpf datagrid popup menuitem

我在使用包含DataGridCell中的动态菜单的Popup时遇到问题。我可以让弹出窗口看起来很好,并且当通过单击窗口中的任何其他位置丢失焦点时消失。但是,当选择其中一个MenuItem时,我无法让弹出窗口消失。

这是我的CellTemplate的XAML:

<DockPanel>
    <ToggleButton Content=" + "
                  FontWeight="Bold"
                  FontFamily="Arial"
                  Foreground="Green"
                  BorderBrush="Transparent"
                  IsThreeState="False"
                  DockPanel.Dock="Right"
                  Name="Button_AddDefinition">
    </ToggleButton>
    <Popup IsOpen="{Binding ElementName=Button_AddDefinition, Path=IsChecked}"
           StaysOpen="False"
           Placement="Right"
           PlacementTarget="{Binding ElementName=Button_AddDefinition}"
           AllowsTransparency="True">
        <Border CornerRadius="3"
                Background="WhiteSmoke"
                BorderBrush="DarkGray"
                BorderThickness="1">
            <Menu ItemsSource="{Binding Path=NewDefinitionTypes}">
                <Menu.ItemsPanel>
                    <ItemsPanelTemplate>
                        <VirtualizingStackPanel Orientation="Vertical" />
                    </ItemsPanelTemplate>
                </Menu.ItemsPanel>
                <Menu.ItemTemplate>
                    <DataTemplate >
                        <MenuItem Header="{Binding StringFormat='New {0}'}"
                                    Command="{Binding RelativeSource={RelativeSource AncestorType=Popup}, Path=DataContext.NewDefinitionCommand}"
                                    CommandParameter="{Binding}">
                        </MenuItem>
                    </DataTemplate>
                </Menu.ItemTemplate>
            </Menu>
        </Border>
    </Popup>
    <ComboBox SelectedItem="{Binding Path=Definition, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True, ValidatesOnDataErrors=True}"
                ItemsSource="{Binding Path=AvailableDefinitions}"
                BorderBrush="Transparent"
                MouseUp="DataGridCell_ComboBox_MouseUp"
                DisplayMemberPath="Name"
                Style="{StaticResource ValidationErrorStyle}">
    </ComboBox>
</DockPanel>

当我点击切换按钮(即'+')时,我会弹出,动态填充每个项目都有一个菜单项。这是它的样子:

enter image description here

当我点击弹出窗口外的任何其他地方时,弹出窗口消失(我想要的)。但是,当我单击其中一个项目时,我还希望弹出窗口处理选择,然后弹出窗口应该消失。这就是我在这里寻找的东西。如果选中其中的项目,如何使弹出窗口消失。我正在开发一个MVVM平台,因此最好使用最少的代码隐藏,但不是教条。

有什么想法吗?

0 个答案:

没有答案