Я установил простой элемент управления с тремя прямоугольниками, каждый из которых имеет всплывающее окно, прикрепленное к нему. Первоначально все три всплывающих окна должны открываться (IsOpen = True), и все три имеют флаг StaysOpen, установленный на false. XAML для этого размещен ниже.Popup with StaysOpen = False
Из документации MSDN на StaysOpen я понимаю, что когда она ложна, щелчок мыши за пределами всплывающего окна закрывает всплывающее окно. Я нахожу, что если я нажимаю мышь полностью вне приложения, то все три всплывающие окна закрываются правильно. Однако, если я щелкнув внутри самого окна WPF, то закрывается только верхнее всплывающее окно. Остальные два остаются видимыми.
Кто-нибудь знает, что здесь происходит, и что я могу сделать, чтобы все три всплывающих окна закрылись, как ожидалось?
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="30"/>
<RowDefinition Height="*"/>
<RowDefinition Height="30"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Rectangle x:Name="Rect1" Fill="DarkBlue"/>
<Rectangle x:Name="Rect2" Fill="Orange" Grid.Row="2"/>
<Rectangle x:Name="Rect3" Fill="DarkRed" Grid.Row="4"/>
<Popup PlacementTarget="{Binding ElementName=Rect1}" Placement="Right" IsOpen="True" StaysOpen="False">
<Border BorderBrush="Black" BorderThickness="2" Background="Wheat" Width="200" Height="100">
<TextBlock>Popup 1</TextBlock>
</Border>
</Popup>
<Popup PlacementTarget="{Binding ElementName=Rect2}" Placement="Right" IsOpen="True" StaysOpen="False">
<Border BorderBrush="Black" BorderThickness="2" Background="Wheat" Width="200" Height="100">
<TextBlock>Popup 2</TextBlock>
</Border>
</Popup>
<Popup PlacementTarget="{Binding ElementName=Rect3}" Placement="Right" IsOpen="True" StaysOpen="False">
<Border BorderBrush="Black" BorderThickness="2" Background="Wheat" Width="200" Height="100">
<TextBlock>Popup 3</TextBlock>
</Border>
</Popup>
</Grid>
</Window>
Я согласен с Клеменсом. Но вместо того, чтобы иметь несколько всплывающих окон, вы можете использовать adorners. Они дают вам большую гибкость (но также сложнее обрабатывать) http://msdn.microsoft.com/en-us/library/ms743737.aspx – SvenG
Спасибо за ответ, Клеменс. Жаль, что это не сработает. Теперь я экспериментирую с использованием всплывающих окон, но сам обрабатываю события кликов. Не очень приятно на самом деле ... –