2017-08-29 110 views
0

嗨我需要触发按钮才能打开并关闭弹出窗口,并且只要在弹出窗口外单击鼠标时弹出窗口就会关闭。如何使用触发按钮关闭弹出窗口

这里是我的XAML:

<Button x:Name="About" 
        Height="50" 
        Margin="0,-30,5,0" 
        HorizontalAlignment="Right" 
        Style="{StaticResource AboutButtonStyle}" /> 
<Popup HorizontalOffset="-300" 
        IsOpen="{Binding IsAboutPopupOpen, Mode=TwoWay}" 
        Placement="RelativePoint" 
        PlacementTarget="{Binding ElementName=About}" 
        StaysOpen="False" 
        VerticalOffset="-125"> 
    <Border Padding="10" 
         Background="White" 
         BorderBrush="{StaticResource SeparatorColorBrush}" 
         BorderThickness="1"> 
     <TextBlock>Some Text</TextBlock> 
    </Border> 
</Popup> 

在我AboutViewModel我实现了一个属性,IsAboutPopupOpen

private bool isAboutPopupOpen; 

public bool IsAboutPopupOpen 
{ 
    get 
    { 
     return this.isAboutPopupOpen; 
    } 

    set 
    { 
     if (value != this.isAboutPopupOpen) 
     { 
      this.isAboutPopupOpen = value; 
      this.NotifyOfPropertyChange(() => IsAboutPopupOpen); 
     } 
    } 
} 

public void About() 
{ 
    IsAboutPopupOpen = true; 
} 

的问题是,当弹出窗口打开,我点击关于按钮, PopUp关闭并再次打开。它应该关闭。除此之外,行为是正确的。

我已经搜索了一个简单的解决方案,并且似乎无法找到它。这应该是一个常见的问题。哦,我正在使用Caliburn.Micro,但这不应该,我不这么认为。谢谢

+1

也许这可能有所帮助:https://stackoverflow.com/questions/2333905/wpf-popup-hiding-problem – Xiaoy312

+0

您的问题是不可复制的:https://stackoverflow.com/help/mcve – mm8

回答

0

@ Xiaoy312指出我在正确的方向。首先,我决定用一个切换按钮:

<ToggleButton 
     x:Name="ShowAboutPopup" 
     Grid.Row="1" 
     Height="50" 
     Margin="0,-30,5,0" 
     HorizontalAlignment="Right" 
     Grid.ZIndex="1000" 
     Style="{StaticResource AboutButtonStyle}" /> 

然后,我决定通过ISOPEN属性我的切换按钮连接到弹出窗口,并设置StaysOpen为false:

<Popup 
     Grid.Row="1" 
     Closed="AboutPopup_OnClosed" 
     HorizontalOffset="-300" 
     IsOpen="{Binding ElementName=ShowAboutPopup, Path=IsChecked, Mode=OneWay}" 
     Placement="RelativePoint" 
     PlacementTarget="{Binding ElementName=ShowAboutPopup}" 
     StaysOpen="False" 
     VerticalOffset="-125"> 
... 
    </Popup> 

最后,我在实现AboutPopup_OnClosed代码隐藏:

private void AboutPopup_OnClosed(object sender, EventArgs e) 
    { 
     if (!object.Equals(this.ShowAboutPopup, Mouse.DirectlyOver)) 
     { 
      this.ShowAboutPopup.IsChecked = false; 
     } 
    } 

希望这可以帮助其他人可能已经与此挣扎。底线是您通常应该使用切换按钮来打开和关闭弹出窗口。

相关问题