2010-02-22 8 views
2

에 Popup.StaysOpen로 클릭 내 UserControl을가 포함되어있어 그 :숨기기 팝업 WPF

  • 버튼
  • 팝업 (포함 된 텍스트 블록)

XAML

<UserControl> 
<button Name="btnShowPopup" Content="Button" Click="Button_Click"/> 
<Popup Name="popup" StaysOpen="true"> 
<TextBlock Text="Popup"/> 
</Popup> 
</UserControl> 

코드 동작

private void Button_Click(object sender, System.Windows.RoutedEventArgs e) 
{ 
    this.popup.IsOpen=!this.popup.IsOpen; 
} 

질문 : btnShowPopup 버튼 밖에서 마우스를 클릭하면 팝업을 숨기려고합니다.

참고 : this.popup.IsOpen=!this.popup.IsOpen; 그러나이 솔루션 또 다른 문제가 발생할 : btnShowPopup.MouseUp 이벤트, 팝업이 사라질 때 나는 변화 StaysOpen="false"btnShowPopup.MouseDown 이벤트를 시도했다.

도와주세요.

답변

3

나는 더 많은 WPF-esque 접근 방식을 시도 할 것이다. 뒤에 코드를 쓰는 대신 속성을 바인딩하려고합니다. ToggleButton의 Button을 변경하면 쉽습니다. ToggleButton에는 IsChecked라는 부울 속성이 있습니다.

<ToggleButton x:Name="myToggle" /> 
<Popup x:Name="Popup" 
    IsOpen="{Binding Path=IsChecked, ElementName=myToggle}" 
    Placement="Right" 
    PlacementTarget="{Binding ElementName=myToggle}" 
    AllowsTransparency="True" 
    Focusable="False" 
    PopupAnimation="Fade" 
    StaysOpen="False"> 
    <Textblock Text="Here goes my content" /> 
</Popup> 

어떻게 생각하십니까?

2

티오. 이것은 내가 시도한 해결책이다. 그러나 두 가지 문제가 있습니다.

1) 버튼을 누르면 팝업이 열리지 만 버튼을 다시 누르면 팝업이 닫히고 다시 빠르게 열립니다. 그것은 내가 기대했던 행동이 아니며, 나는 그것이 다시 닫힐 것이라고 생각했다.

2) 토글 버튼에서 탭하면 팝업이 계속 열려 있습니다.

나는 다른 사람이 같은 문제를 확실하게 주도했습니다 물론, 조금 주위에 인터넷 검색, 그리고 해결 : =)

확인이 아웃 : http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/f0502813-9c4f-4b45-bab8-91f98971e407

3

토글 버튼의 ​​속성 ClickMode="Press"을 설정합니다.

<ToggleButton x:Name="myToggle" ClickMode="Press" /> 
3

또한 토글 버튼에 StaysOpen 속성을 바인딩 할 수 있습니다 :

StaysOpen="{Binding ElementName=toggleButton,Path=IsMouseOver}" 

https://social.msdn.microsoft.com/Forums/vstudio/en-US/f0502813-9c4f-4b45-bab8-91f98971e407/popup-popupstaysopen-togglebutton-and-data-binding-helpful-tip?forum=wpf

난 내 데이터 그리드를 클릭 더블 경우에 저에 대한 문제가 있었다

가, 느릅 나무 팝업에의 팝업이 직접 열리므로 멀티 바인드를 사용했습니다. 내가 한 짓 :

I 멀티는 IsMouseOver toggleButton의 StayOpen 속성과 팝업에있는 IsMouseOver 데이터 그램을 묶었습니다.

<Popup.StaysOpen> 
    <MultiBinding Converter="{StaticResource MultiBinding_StayOpen}"> 
     <Binding ElementName="toggleButton" Path="IsMouseOver"/> 
     <Binding ElementName="dtg_loc" Path="IsMouseOver" /> 
    </MultiBinding> 
</Popup.StaysOpen> 

multiBindingConverter는 :

public class MultiBinding_StayOpen : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 

     bool toggleIsMouseOver; 
     bool datagridIsMouseOver; 

     toggleIsMouseOver = System.Convert.ToBoolean(values[0]); 
     datagridIsMouseOver = System.Convert.ToBoolean(values[1]); 


     if (toggleIsMouseOver == false && datagridIsMouseOver == false) 
      return false; 

     if (toggleIsMouseOver == true && datagridIsMouseOver == false) 
      return true; 

     if (toggleIsMouseOver == true && datagridIsMouseOver == true) 
      return false; 

     return true; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

:-) 도움이 희망