WPF嵌套弹出窗口未关闭
我有一个带有图像的窗口,其中显示了其MouseEnter事件处理程序中的弹出窗口:WPF嵌套弹出窗口未关闭,wpf,Wpf,我有一个带有图像的窗口,其中显示了其MouseEnter事件处理程序中的弹出窗口: private void theImage_MouseEnter(object sender, MouseEventArgs e) { contolPopup.IsOpen = true; } private void setButton_Click(object sender, RoutedEventArgs e) { paramPopu
private void theImage_MouseEnter(object sender, MouseEventArgs e)
{
contolPopup.IsOpen = true;
}
private void setButton_Click(object sender, RoutedEventArgs e)
{
paramPopup.IsOpen = true;
}
此contolPopup中有一个按钮,显示单击事件处理程序中的另一个弹出窗口:
private void theImage_MouseEnter(object sender, MouseEventArgs e)
{
contolPopup.IsOpen = true;
}
private void setButton_Click(object sender, RoutedEventArgs e)
{
paramPopup.IsOpen = true;
}
这个paramPopup在显示后的行为有点奇怪:如果我单击它外部的某个地方,它不会关闭,但是如果我单击这个paramPopup内部的某个控件,然后单击它外部的某个地方,它会很好地关闭
什么会导致这种行为
我试图集中精力,但这无助于:
private void setButton_Click(object sender, RoutedEventArgs e)
{
paramPopup.IsOpen = setButton.IsChecked??false;
paramPopup.Focus();
}
对于两个弹出窗口,Popup.StaysOpen都设置为false。我使用.NET4.0
下面我提供了完整的源代码:
从窗口打开第一个弹出窗口:
<Window x:Class="GeoControls.WebcamWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:GeoControls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
SizeChanged="Window_SizeChanged" Loaded="Window_Loaded" SizeToContent="WidthAndHeight" ResizeMode="NoResize"
Title="{Binding Name}"
MouseEnter="theImage_MouseEnter" MouseLeave="theImage_MouseLeave" MouseLeftButtonUp="Window_MouseLeftButtonUp" Closed="Window_Closed">
<Grid Background="Black">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Image Grid.Row="0" Grid.ColumnSpan="2" Name="theImage" Width="{Binding CurrentResolution.Width}" Height="{Binding CurrentResolution.Height}" />
<TextBlock Name="waitingTextBlock" Grid.Row="0" Text="Waiting the response from TV Server..." Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<Popup Name="contolPopup" StaysOpen="False" PlacementTarget="{Binding ElementName=theImage}" PopupAnimation="Scroll" Placement="Left" AllowsTransparency="True">
<Border CornerRadius="10" BorderThickness="1" BorderBrush="Black" Padding="10" Background="White">
<local:WebcamControl x:Name="webcamControl" Background="White">
</local:WebcamControl>
</Border>
</Popup>
</Grid>
</Window>
第二个弹出窗口由第一个弹出窗口中WebcamControl中包含的ParamButtons打开:
<UserControl x:Class="GeoControls.ParamButtons"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
xmlns:local="clr-namespace:GeoControls"
d:DesignHeight="30" d:DesignWidth="300">
<Grid>
............ omitted some code here................
<Popup Name="paramPopup" StaysOpen="False" PlacementTarget="{Binding ElementName=setButton}" AllowsTransparency="True" Closed="paramPopup_Closed">
<Border Focusable="True" CornerRadius="10" BorderThickness="1" BorderBrush="Black" Padding="10" Background="White">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="300"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
<local:ParamSlider Grid.Column="0" x:Name="paramSlider" />
<Button Content="OK" Click="okButton_Click" Grid.Column="1" Margin="5" />
<Button Content="Cancel" Click="cancelButton_Click" Grid.Column="2" Margin="5" />
</Grid>
</Border>
</Popup>
</Grid>
</UserControl>
您的弹出窗口是如何定义的?在不知道它们是如何定义的以及它们的位置的情况下,很难判断问题是什么。添加了XAML源代码奇怪,它对我来说没问题。可能是关闭的处理程序中的某些内容导致它重新打开,但这只是一个猜测。