我在使用包含 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 平台上工作,因此首选最少的代码隐藏,但不是教条。
有任何想法吗?