2012-01-09 12 views
2

私は3つの矩形で簡単なコントロールを設定しました。それぞれのポップアップにはポップアップが添付されています。最初は、3つのポップアップがすべて開かれるように設定されています(IsOpen = True).3つともStaysOpenフラグがfalseに設定されています。このためのXAMLは以下に掲載されています。StaysOpen = Falseを指定したポップアップ

StaysOpenに関するMSDNのドキュメントから、偽であるときにポップアップの外にマウスをクリックするとポップアップが閉じられるはずです。私が見つけたのは、アプリケーションの外部でマウスを完全にクリックすると、3つのポップアップがすべて正しく閉じられるということです。しかし、WPFウィンドウ自体をクリックすると、一番上のポップアップだけが閉じられます。他の2つは目に見えるままです。

ここで何が起こっているのか誰かが知っていますか?3つのポップアップがすべて予想通りに閉じることを確認するために私ができることはありますか?

<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> 

答えて

2

MSDNは「StaysOpenがfalseの場合、これらのイベントのいずれかがポップアップコントロール外で発生したときに、ポップアップ制御を傍受すべてのマウスとキーボードのイベントを決定するために。」と言います

一度に1つのポップアップしか(マウスのキャプチャによって)これを行うことはできないと思うので、あなたのアプローチはうまくいかないでしょう。同じ親に複数のポップアップを開くのが一般的に良いのかどうかは分かりません。

+0

私はClemensに同意します。 しかし、複数のポップアップを使用する代わりに、代わりにアドナーを使用することができます。彼らはあなたにもっと柔軟性を与える(しかし、扱いがさらに難しい) http://msdn.microsoft.com/en-us/library/ms743737.aspx – SvenG

+0

答えのおかげで、クレメンス。残念ながら、それはうまく動作しません。私は現在、ポップアップを使用していますが、クリックイベントを自分で処理しています。本当に素敵じゃない... –

関連する問題