C# 通过在WPF中单击按钮控制弹出窗口的打开和关闭

C# 通过在WPF中单击按钮控制弹出窗口的打开和关闭,c#,.net,wpf,popup,C#,.net,Wpf,Popup,我的要求是通过按钮控制弹出窗口的关闭/打开。在我下面的代码中,单击按钮弹出窗口会打开,但下次单击时不会关闭 XAML 注意:我可以使用切换按钮实现上述情况,但我的要求仅限于按钮。如果不切换,则无法完成此操作,也就是说,按钮本身无法完成此操作。您正在处理一个状态为“打开”和“关闭”的控件。你需要知道当前的状态。要实现此目的,请向宿主控件添加标志(需要代码隐藏),或使用弹出窗口的标志(需要代码隐藏),或使用切换按钮的标志(无代码隐藏) 避免使用切换按钮是没有任何意义的:它是一个额外知道或具有状态

我的要求是通过按钮控制弹出窗口的关闭/打开。在我下面的代码中,单击按钮弹出窗口会打开,但下次单击时不会关闭

XAML



注意:我可以使用切换按钮实现上述情况,但我的要求仅限于按钮。

如果不切换,则无法完成此操作,也就是说,
按钮本身无法完成此操作。您正在处理一个状态为“打开”和“关闭”的控件。你需要知道当前的状态。要实现此目的,请向宿主控件添加标志(需要代码隐藏),或使用
弹出窗口的标志(需要代码隐藏),或使用
切换按钮的标志(无代码隐藏)

避免使用
切换按钮是没有任何意义的:它是一个额外知道或具有状态的
按钮。它可以处理
ICommand
或发出
单击事件-它是一个
按钮
。这正是你需要的

您不必在
按钮的
内容中明确添加
TextBlock
。将字符串指定给
按钮.Content
时,控件将自动创建
文本块来显示该字符串

main window.xaml

<Button Click="TogglePopup_OnClick"
        Content="Show Popup" />
                
<Popup x:Name="Popup" />    

我不知道如何交替不同的动画,但你可以有两个按钮:一个打开(可见)和另一个关闭(隐藏)。除了更改Popup.IsOpen
之外,他们还需要更改自己和对方按钮的可见性。
<Button Click="TogglePopup_OnClick"
        Content="Show Popup" />
                
<Popup x:Name="Popup" />    
private void TogglePopup_OnClick(object sender, EventArgs e)
  => this.Popup.IsOpen ^= true;