Всплывающее окно с StaysOpen = False - PullRequest
2 голосов
/ 09 января 2012

Я установил простой элемент управления с тремя прямоугольниками, к каждому из которых прикреплено всплывающее окно. Первоначально все три всплывающих окна открываются (IsOpen = True), а для всех трех флаг StaysOpen имеет значение false. XAML для этого размещен ниже.

Из документации 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>

1 Ответ

2 голосов
/ 09 января 2012

В MSDN написано: «Когда StaysOpen имеет значение false, элемент управления Popup перехватывает все события мыши и клавиатуры, чтобы определить, когда одно из этих событий происходит вне элемента управления Popup.»

Я думаю, что только одно всплывающее окно может сделать это (путем захвата мыши), поэтому ваш подход не будет работать.Я не знаю, будет ли хорошей идеей иметь более одного открытого всплывающего окна на одном и том же родительском элементе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...