我在一个资源字典中定义了一个名为"ConextPopup"的弹出窗口,如下所示:
<ControlTemplate x:Key="UXIconComboBoxControlTemplate" TargetType="{x:Type controls:UXIconComboBox}" >
<ControlTemplate.Resources>
<converters:IconComboBoxDropdownHorizontalOffsetMultiConverter x:Key="ComboBoxDropdownHorizontalOffsetConverter"/>
</ControlTemplate.Resources>
<Grid
x:Name="rootGrid"
Width="{TemplateBinding HitAreaWidth}"
Height="{TemplateBinding HitAreaHeight}"
Background="{TemplateBinding Background}">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<controls:ExtendedHitAreaButton
Grid.Row="0"
x:Name="OpenPopupIconButton"
IsDefault="True"
Style="{StaticResource UXIconComboBoxButtonStyle}">
<controls:ExtendedHitAreaButton.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames
Storyboard.TargetName="ContextPopup"
Storyboard.TargetProperty="IsOpen">
<DiscreteBooleanKeyFrame KeyTime="0:0:0.25" Value="True" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</controls:ExtendedHitAreaButton.Triggers>
</controls:ExtendedHitAreaButton>
<Popup
x:Name="ContextPopup"
Grid.Row="1"
Placement="Bottom"
PlacementTarget="{Binding ElementName=OpenPopupIconButton}"
StaysOpen="False"
PreviewKeyDown="ContextPopup_PreviewKeyDown">
<Popup.HorizontalOffset>
<MultiBinding Converter="{StaticResource ComboBoxDropdownHorizontalOffsetConverter}">
<Binding ElementName="OpenPopupIconButton" Path="ActualWidth"/>
<Binding ElementName="PopupListBox" Path="ActualWidth"/>
</MultiBinding>
</Popup.HorizontalOffset>
<ListBox
x:Name="PopupListBox"
ItemsSource="{Binding ItemsSource, RelativeSource={RelativeSource TemplatedParent}}"
ItemTemplate="{Binding ItemTemplate, RelativeSource={RelativeSource TemplatedParent}}"
Loaded="PopupListBox_OnLoaded"
KeyboardNavigation.IsTabStop="True"
KeyboardNavigation.TabNavigation="Continue"
BorderThickness="0"/>
</Popup>
</Grid>
<ControlTemplate.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IconComboBoxSemanticColorType}" Value="Default"/>
<Condition Binding="{Binding Path=IsOpen, ElementName=ContextPopup}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="{DynamicResource BrushIconComboBox_Popup_Open_Background}" />
</MultiDataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
该弹出窗口具有名为"ContextPopup_PreviewKeyDown"的PreviewKeyDown方法,该方法在资源字典代码隐藏文件中定义如下:
private void ContextPopup_PreviewKeyDown(object sender, KeyEventArgs e)
{
var popupControl = sender as Popup;
if (e.Key == Key.Escape)
{
popupControl.IsOpen = false;
}
}
当弹出窗口显示时,我按下Esc按钮,并验证是否调用了ContextPopup_PreviewKeyDown方法,并且已将popupControl.IsOpen属性设置为False,但该弹出窗口并未关闭.
有谁能解释一下为什么弹出窗口不能关闭,以及该怎么办?
谢谢你的帮助.