Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 当选择一个菜单项(DataGridCell)时,如何关闭包含菜单的弹出窗口_Wpf_Datagrid_Popup_Menuitem - Fatal编程技术网

Wpf 当选择一个菜单项(DataGridCell)时,如何关闭包含菜单的弹出窗口

Wpf 当选择一个菜单项(DataGridCell)时,如何关闭包含菜单的弹出窗口,wpf,datagrid,popup,menuitem,Wpf,Datagrid,Popup,Menuitem,我在使用DataGridCell中包含动态菜单的弹出窗口时遇到问题。我可以通过单击窗口中的任何其他位置,使弹出窗口看起来很好,当焦点丢失时消失。但是,当选择一个菜单项时,我无法使弹出窗口消失 以下是my CellTemplate的XAML: <DockPanel> <ToggleButton Content=" + " FontWeight="Bold" FontFamily="Arial"

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

以下是my 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>

当我单击切换按钮(即“+”)时,我会弹出一个动态填充的弹出窗口,每个项目都有一个菜单项。下面是它的外观:

当我点击弹出窗口之外的任何地方时,弹出窗口消失(我想要的)。但是,当我单击其中一个项目时,我还希望弹出窗口处理选择,然后弹出窗口应该消失。这就是我要找的。如何使弹出窗口在选中其中的项目后消失。我在一个MVVM平台上工作,所以尽量少的代码隐藏是首选,但不是教条


有什么想法吗?

为什么不创建一个上下文菜单,而不是创建一个菜单并将其放置在弹出窗口中?主要原因是我只希望在用户单击“+”按钮时显示项目菜单。要求是用户操作来打开菜单,要求是不要使用简单的上下文菜单(如果完全由我决定的话,我会这样做)。是否可以指定上下文菜单,但可以从行中的切换按钮/按钮“启动”?