如何将Popup正确绑定到ToggleButton?

我试图从用户界面级别做一些看起来相对简单和逻辑的东西,但我有一个非常烦人的错误。 我有一个ToggleButton ,我试图在按钮切换时显示一个Popup窗口,并在按钮切换时隐藏Popup窗口。 当用户点击它时, Popup也会隐藏。

使用以下XAML时,一切都按预期工作,除非在Popup窗口显示后单击切换按钮, Popup窗口会在一瞬间消失,然后重新出现。

我怀疑这里发生了什么是点击远离Popup窗口导致它关闭按钮然后立即切换按钮,鼠标点击它。 我只是不知道如何修复它。

任何帮助表示赞赏。 谢谢。

     This is a test   

Stephans的答案有一个缺点,即每当它失去焦点时关闭弹出窗口的所需行为也会消失。

当弹出窗口打开时,我通过禁用切换按钮解决了这个问题。 另一种方法是使用IsHitTestVisible属性而不是启用:

     This is a test   

转换器看起来像这样:

 public class BoolToInvertedBoolConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value is bool) { bool boolValue = (bool)value; return !boolValue; } else return false; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException("ConvertBack() of BoolToInvertedBoolConverter is not implemented"); } } 

没有IValueConverter的解决方案:

         This is a test    

在ToggleButton上设置Property ClickMode="Press" apixeltoofar

为您的Popup设置StaysOpen="True"

来自MSDN :

获取或设置一个值,该值指示当控件不再处于焦点时是否关闭Popup控件。

[…]

IsOpen属性设置为false时,如果Popup控件关闭, IsOpen false ; IsOpenfalse

如果Popup控件在Popup控件外发生鼠标或键盘事件时关闭,则返回false