2016-10-16 7 views
0

Mouseoverのボタンのすぐ隣にポップアップが表示されます。私は、マウスがボタンからポップアップまで越えると、ポップアップを開いたままにしておく必要があります。私はまた、ボタンがボタンまたはポップアップのいずれかを離れるときに閉じるためにポップアップが必要です。それはthisポストに似ていますので、私を許してください。しかし、実際の解決策はありませんでした。ボタンと新しいポップアップを含むようにマウス領域を拡張する

本質的には、ボタンとポップアップを含むようにマウスの領域を拡張して、マウスが両方を移動でき、マウスがそのいずれかを離れる場合はマウスが離れることができます。

 <Popup x:Key="CustomPopup" x:Name="samplePopup" Margin="0" AllowsTransparency="False" StaysOpen="True"> 

     <Border BorderThickness="1" BorderBrush="Black" Background="AntiqueWhite"> 
      <WebBrowser x:Name="PopBrowser" local:WebBrowserUtility.Body="{Binding Path=Value}" Height="400" Width="500"/> 
     </Border> 
    </Popup> 

の背後にあるコードにしようと、私は(私はオフセットなしているにもかかわらず)マウスがポップアップするボタンから取得できるようにするためにタイマーを追加し、ポップアップを超える場合はオープン、それを維持するためにIfステートメントを追加しました。

Popup popUp { get; set; } 

    private void ButtonMouseEnter(object sender, MouseEventArgs e) 
    { 
     Button currentButton = sender as Button; 
     popUp = (Popup)FindResource("CustomPopup"); 
     DelayedExecutionService.DelayedExecute(() => 
     { 
      if (currentButton.IsMouseOver) 
      { 
       popUp.PlacementTarget = currentButton; 
       popUp.Placement = PlacementMode.Right; 
       popUp.HorizontalOffset = -5; 
       popUp.StaysOpen = true; 
       popUp.IsOpen = true; 
      } 

     }); 
    } 

    private void MouseLeave(object sender, MouseEventArgs e) 
    { 
     DelayedExecutionService.DelayedExecute(() => 
     { 
      if (popUp.IsMouseDirectlyOver) 
      { 
       popUp.IsOpen = true; 
       MessageBox.Show("over popup"); //Not recognizing this. 
      } 
      else 
       popUp.IsOpen = false; 
       MessageBox.Show("not over popup"); //I get this even if mouse is over popup. 
     }); 
    } 

このGIFはボタンのみの私のグリッドと非常に不便であるポップアップのためのMouseLeaveを示しています

enter image description here

+0

Buttonの 'MouseEnter'イベントとコードのハンドルを使用します。 – AnjumSKhan

+0

ありがとうAnjum。私は私がもっと近づいたと思う(上記の私のコードを更新した)が、私はそれがコードから動作するように思える...私は同じMouseLeaveイベントで両方のコントロールのマウスの位置を確認することができる必要があります。ボタンのmouseLeaveイベントからpopUp.IsMouseDirectlyOverをチェックできない理由は何ですか? – ctalley5

+0

何をしていないのか。これは簡単なことです。 – AnjumSKhan

答えて

0
<Grid> 
    <Button x:Name="Btn" MouseEnter="Button_MouseEnter_1" Content="Button" HorizontalAlignment="Left" Margin="32,41,0,0" VerticalAlignment="Top" Width="75"/> 
    <Popup x:Name="Popup1" MouseLeave="Popup_MouseLeave_1" PlacementTarget="{Binding ElementName=Btn}" Placement="Bottom"> 
     <StackPanel> 
      <TextBlock Text="Some popup text !"/> 
      <Button Content="Close"/> 
     </StackPanel> 
    </Popup> 
</Grid> 

概念コード:

 private void Popup_MouseLeave_1(object sender, MouseEventArgs e) 
     { 
      Popup1.IsOpen = false; 
     } 

     private void Button_MouseEnter_1(object sender, MouseEventArgs e) 
     { 
      Popup1.IsOpen = true; 
     } 

知らせる場合これは機能しません。

+0

を学んでいます。それは単にボタンから開いて閉じるポップアップです。マウスがボタンからポップアップに移動する場合、ポップアップが必要です。私はマウスをポップアップにする代わりに、ポップアップにイベントを残すことはできません。ポップアップではなくボタンを離しても、閉じる必要があります。 – ctalley5

+0

@ ctalley5このコードは、ユーザーがボタンからマウスを離したときにポップアップを閉じることはありません。 – AnjumSKhan

+0

申し訳ありません電話に切り替えて、xamlが見えませんでした。 MouseleaveはButtonでも動作する必要があります...もしマウスがポップアップに行かなくても(そしてユーザーが別のものに移動すると)マウスが閉じるでしょう。 – ctalley5

関連する問題