如何使用触发按钮关闭弹出窗口
问题描述:
嗨我需要触发按钮才能打开并关闭弹出窗口,并且只要在弹出窗口外单击鼠标时弹出窗口就会关闭。如何使用触发按钮关闭弹出窗口
这里是我的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,但这不应该,我不这么认为。谢谢
答
@ 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;
}
}
希望这可以帮助其他人可能已经与此挣扎。底线是您通常应该使用切换按钮来打开和关闭弹出窗口。
也许这可能有所帮助:https://stackoverflow.com/questions/2333905/wpf-popup-hiding-problem – Xiaoy312
您的问题是不可复制的:https://stackoverflow.com/help/mcve – mm8