2

我在使用包含 DataGridCell 中的动态菜单的弹出窗口时遇到问题。我可以让弹出窗口看起来很好,并在失去焦点时通过单击窗口中的其他任何位置消失。But, I cannot get the popup to disappear when one of the MenuItems is selected.

这是我的 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 平台上工作,因此首选最少的代码隐藏,但不是教条。

有任何想法吗?

4

0 回答 0