我在使用包含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>
当我点击切换按钮(即'+')时,我会弹出,动态填充每个项目都有一个菜单项。这是它的样子:
当我点击弹出窗口外的任何其他地方时,弹出窗口消失(我想要的)。但是,当我单击其中一个项目时,我还希望弹出窗口处理选择,然后弹出窗口应该消失。这就是我在这里寻找的东西。如果选中其中的项目,如何使弹出窗口消失。我正在开发一个MVVM平台,因此最好使用最少的代码隐藏,但不是教条。
有什么想法吗?