WPF让我从这里感到紧张。我为弹出窗口配置了一些复杂的内容(网格,按钮等)。我在文本框MouseDown预览事件上将其StaysOpen属性设置为False,将IsOpen设置为True。
事情是,它会打开,但在点击窗外的任何地方时都不会关闭。
有什么建议吗?
谢谢!
更新
我的弹出窗口里面有按钮。当我点击其中一个时,弹出窗口会在我点击它之外时关闭。是否有一些奇怪的事情发生在事件路由?
答案 0 :(得分:4)
如果由任何其他控件事件打开,弹出窗口似乎不会关闭。我只是将IsOpen属性绑定到ToggleButton的IsChecked属性来模拟组合框。
感谢您的所有答案。
答案 1 :(得分:1)
我使用后面的代码来初始化弹出窗口,并且我发现如果从其他UI动作(例如鼠标事件)运行同步,它就不会关闭。要解决此问题,我将其运行为异步:
public static void ShowPopupMessage(string message)
{
DispatcherHelper.UIDispatcher.BeginInvoke(new Action(() =>
{
var popup = new Popup
{
Child = new AutoHideMessage(message),
StaysOpen = false,
IsOpen = true
};
}));
}
答案 2 :(得分:0)
我在文本框MouseDown预览事件上设置了IsOpen。
设置为什么? TextBox托管在哪里?
我只能用提供的信息来猜测,但是当你在Popup
外面点击时,你的事件处理程序正在解雇并再次打开它。
答案 3 :(得分:0)
您可以使用PopUp的LostFocus
事件。如果焦点不在弹出窗口内,请将其IsOpen
设置为false以关闭它。
答案 4 :(得分:0)
我也有这个问题,除了Button的PreviewMouseButtonUp事件。假设Popups存在一些错误,并试图在隧道事件中打开它们是准确的,并引导我走向我的修复路径(这是更通用的)。
我需要通过监听冒泡事件而不是隧道事件来解决此问题(主机控件是通用的/可能是几种类型的控件),特别是使用AddHandler(RoutedEvent,Delegate,Boolean)方法来捕获已处理的事件。
WAG问题出在从隧道转换到冒泡的某个地方。