2016-10-16 7 views
0

Mouseover의 버튼 바로 옆에 팝업이 나타납니다. 마우스가 버튼에서 팝업으로 넘어갈 때 팝업을 열어 두어야합니다. 단추가 팝업 또는 팝업 중 하나를 벗어나면 닫을 팝업이 필요합니다. this 게시물과 유사하므로 용서하시기 바랍니다. 작동하는 해결책이 없습니다.버튼 및 새 팝업을 포함하도록 마우스 영역 확장

본질적으로, mouseleave 영역을 확장하여 버튼과 팝업을 포함하여 마우스가 둘 중 하나를 벗어나면 mouseleave 및 fire를 통해 이동할 수 있도록하고 싶습니다.

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

뒤에 코드에서 시도, 나는 (I 더 오프셋 경우에도) 마우스 팝업 버튼에서 얻을 수 있도록 타이머를 추가 한 후 팝업 이상의 경우 개방을 유지하기 위해 If 문을 추가했다.

enter image description here

+0

Button의 'MouseEnter' 이벤트를 사용하고 코드의 핸들을 사용하십시오. – AnjumSKhan

+0

감사합니다. 그게 훨씬 더 가까이있어 (위의 코드를 업데이트 한) 있지만 코드에서 작동하도록 내게 보인다 ... 동일한 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; 
     } 

경우 알려

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를 보여줍니다 이것은 효과가 없습니다.

+0

을 배우고 있습니다. 간단히 말해서 버튼을 열고 닫을 수 있습니다. 마우스가 버튼에서 팝업으로 이동하면 열려 있어야합니다. 나는 마우스를 이벤트 대신 팝업으로 남겨 둘 수는 없지만 사용자가 버튼을 (팝업으로가 아닌) 떠난다면 여전히 닫아야한다. – ctalley5

+0

@ ctalley5이 코드는 사용자가 마우스를 단추에서 멀리 떨어 뜨리면 팝업을 닫지 않습니다. – AnjumSKhan

+0

사과 전화로 전환하여 xaml을 보지 못했습니다. Mouseleave는 Button에서도 작동해야합니다 ... 마우스가 팝업으로 이동하지 않으면 (그리고 사용자가 다른 것으로 이동하면) 마우스가 닫힙니다. – ctalley5